node-webkit中使用sqlite3(MAC平台)


前言

最近使用node-webkit開發一款博客發布軟件,來替換難用的Windows Live Writer(主要是對Markdown標簽的支持很差勁)。為了解決博文信息臨時保存的問題,想到了使用sqlite這個小型的數據庫。折騰的過程中遇到不少問題,這里做個記錄方便以后查閱。

安裝Sqlite3模塊

參考sqlite3的官方文檔說明,使用npm install sqlite3安裝sqlite3。

使用node-webkit測試官方給出的一段代碼:

<script type="text/javascript">
  var sqlite3 = require('sqlite3').verbose();
  var db = new sqlite3.Database('data.db');
    db.serialize(function() {
    db.run("CREATE TABLE lorem (info TEXT)");

    var stmt = db.prepare("INSERT INTO lorem VALUES (?)");
    for (var i = 0; i < 10; i++) {
        stmt.run("Ipsum " + i);
    }
    stmt.finalize();

    db.each("SELECT rowid AS id, info FROM lorem", function(err, row) {
        console.log(row.id + ": " + row.info);
    });
  });

  db.close();
</script>

執行以上代碼會報如下錯誤:

Uncaught Error: Cannot find module './binding/Release/node-v11-darwin-ia32/node_sqlite3.node'

這是因為我是用的node-webkit是32位的,而使用npm安裝的sqlite3模塊是針對node.js的64位版本,如下圖所示:

看了下sqlite3的官方文檔,文檔中提到,nodejs和node-webkit的ABI不同,需要針對node-webkit重新編譯sqlite3。

重新編譯針對node-webkit的sqlite3模塊

這個過程還是參考的sqlite3的官方資料,不過過程中遇到不少問題。

這里直接給出正確的編譯步驟:

1. 沒有安裝nw-gyp的話,全局安裝之:sudo npm install nw-gyp -g (nw-gyp可以用來編譯針對node-webkit的C++ add on模塊,因為node-sqlite3有部分代碼是用C語言編寫的,所以需要針對不同平台進行單獨編譯)

2. cd到sqlite3的安裝目錄(node_modules/sqlite3),執行重新編譯命令:nw-gyp rebuild --target=0.8.4 --arch=ia32 (target參數是node-webkit的版本,根據自己使用的node-webkit版本號自行修改,arch參數是node-webkit的架構信息,我用的是mac 32位的node-webkit,所以必須指定為ia32)

3. 將編譯的node_sqlite3.node(在node_modules/sqlite3/build/Release目錄下)放到合適的目錄:node_modules/sqlite3/lib/binding/Release/node-v11-darwin-ia32 (node-v11-darwin-ia32默認是不存在的,需要手動創建)

再次測試官方給出的代碼

再次執行后控制台輸出結果如下(可以看到select語句的查詢結果輸出,表明可以正常使用了):


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM