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

前言

最近使用node-webkit开发一款博客发布软件,来替换难用的Windows Live Writer(主要是对Markdown标签的支持不好劲)。为了解决博文信息临时保存的问题,想到了使用sqlite这个小型的数据库。折腾的过程当中遇到很多问题,这里作个记录方便之后查阅。javascript

安装Sqlite3模块

参考sqlite3的官方文档说明,使用npm install sqlite3安装sqlite3。java

使用node-webkit测试官方给出的一段代码:node

<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>

执行以上代码会报以下错误:web

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

这是由于我是用的node-webkit是32位的,而使用npm安装的sqlite3模块是针对node.js的64位版本,以下图所示:数据库

看了下sqlite3的官方文档,文档中提到,nodejs和node-webkit的ABI不一样,须要针对node-webkit从新编译sqlite3。npm

从新编译针对node-webkit的sqlite3模块

这个过程仍是参考的sqlite3的官方资料,不过过程当中遇到很多问题。架构

这里直接给出正确的编译步骤:测试

1. 没有安装nw-gyp的话,全局安装之:sudo npm install nw-gyp -g (nw-gyp能够用来编译针对node-webkit的C++ add on模块,由于node-sqlite3有部分代码是用C语言编写的,因此须要针对不一样平台进行单独编译)ui

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语句的查询结果输出,代表能够正常使用了):

相关文章
相关标签/搜索