NWJS版本0.28.0使用NodeJS v9.4运行,SQlite3软件包仅兼容v7.x。
如何在v0.28中使用SQLite和Sequelize?
我必须编译SQlite的命令是
npm install sqlite3 --build-from-source --runtime=node-webkit --target_arch=ia32 --target=""
但无论我把哪个目标都搞错了。
如果无法这样做,我可以将哪个ORM /数据库用于图书馆管理应用程序(歌曲,书籍,字体,图标等)。数据库可能变得庞大。
谢谢!
编辑输出:
> sqlite3@3.1.13 install /media/DarkHawk/srv/NodesProjects/NJS-Player/node_modules/sqlite3
> node-pre-gyp install --fallback-to-build
gyp WARN install got an error, rolling back install
gyp ERR! configure error
gyp ERR! stack Error: 404 response downloading http://node-webkit.s3.amazonaws.com/v9.4.0/nw-headers-v9.4.0.tar.gz
gyp ERR! stack at Request.<anonymous> (/usr/lib/node_modules/nw-gyp/lib/install.js:216:14)
gyp ERR! stack at emitOne (events.js:121:20)
gyp ERR! stack at Request.emit (events.js:211:7)
gyp ERR! stack at Request.onRequestResponse (/usr/lib/node_modules/nw-gyp/node_modules/request/request.js:1068:10)
gyp ERR! stack at emitOne (events.js:116:13)
gyp ERR! stack at ClientRequest.emit (events.js:211:7)
gyp ERR! stack at HTTPParser.parserOnIncomingClient (_http_client.js:551:21)
gyp ERR! stack at HTTPParser.parserOnHeadersComplete (_http_common.js:117:23)
gyp ERR! stack at Socket.socketOnData (_http_client.js:440:20)
gyp ERR! stack at emitOne (events.js:116:13)
gyp ERR! System Linux 4.10.0-38-generic
gyp ERR! command "/home/jer/.nvm/versions/node/v8.9.1/bin/node" "/usr/bin/nw-gyp" "configure" "--fallback-to-build" "--module=/media/DarkHawk/srv/NodesProjects/NJS-Player/node_modules/sqlite3/lib/binding/node-webkit-v9.4.0-linux-ia32/node_sqlite3.node" "--module_name=node_sqlite3" "--module_path=/media/DarkHawk/srv/NodesProjects/NJS-Player/node_modules/sqlite3/lib/binding/node-webkit-v9.4.0-linux-ia32"
gyp ERR! cwd /media/DarkHawk/srv/NodesProjects/NJS-Player/node_modules/sqlite3
gyp ERR! node -v v8.9.1
gyp ERR! nw-gyp -v v3.6.3
gyp ERR! not ok
node-pre-gyp ERR! build error
node-pre-gyp ERR! stack Error: Failed to execute 'nw-gyp configure --fallback-to-build --module=/media/DarkHawk/srv/NodesProjects/NJS-Player/node_modules/sqlite3/lib/binding/node-webkit-v9.4.0-linux-ia32/node_sqlite3.node --module_name=node_sqlite3 --module_path=/media/DarkHawk/srv/NodesProjects/NJS-Player/node_modules/sqlite3/lib/binding/node-webkit-v9.4.0-linux-ia32' (1)
node-pre-gyp ERR! stack at ChildProcess.<anonymous> (/media/DarkHawk/srv/NodesProjects/NJS-Player/node_modules/sqlite3/node_modules/node-pre-gyp/lib/util/compile.js:83:29)
node-pre-gyp ERR! stack at emitTwo (events.js:126:13)
node-pre-gyp ERR! stack at ChildProcess.emit (events.js:214:7)
node-pre-gyp ERR! stack at maybeClose (internal/child_process.js:925:16)
node-pre-gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:209:5)
node-pre-gyp ERR! System Linux 4.10.0-38-generic
node-pre-gyp ERR! command "/home/jer/.nvm/versions/node/v8.9.1/bin/node" "/media/DarkHawk/srv/NodesProjects/NJS-Player/node_modules/sqlite3/node_modules/.bin/node-pre-gyp" "install" "--fallback-to-build"
node-pre-gyp ERR! cwd /media/DarkHawk/srv/NodesProjects/NJS-Player/node_modules/sqlite3
node-pre-gyp ERR! node -v v8.9.1
node-pre-gyp ERR! node-pre-gyp -v v0.6.38
node-pre-gyp ERR! not ok
Failed to execute 'nw-gyp configure --fallback-to-build --module=/media/DarkHawk/srv/NodesProjects/NJS-Player/node_modules/sqlite3/lib/binding/node-webkit-v9.4.0-linux-ia32/node_sqlite3.node --module_name=node_sqlite3 --module_path=/media/DarkHawk/srv/NodesProjects/NJS-Player/node_modules/sqlite3/lib/binding/node-webkit-v9.4.0-linux-ia32' (1)
npm WARN njs-player@0.0.1 No description
npm WARN njs-player@0.0.1 No repository field.
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! sqlite3@3.1.13 install: `node-pre-gyp install --fallback-to-build`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the sqlite3@3.1.13 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
答案 0 :(得分:0)
您现在可能已经解决了这个问题,但是如果其他人遇到了同样的问题,这就是我的解决方法。
基本问题是sequelize对'sqlite3'提出了要求,并且这将自动从node_modules中导入。
麻烦的是,这打乱了整个“ npm install”的工作,因为现在您必须输入很长的命令行才能正确地为nwjs构建sqlite。因此,如果删除node_modules,则必须记住每次执行此操作的过程,这很烦人。
不幸的是,我们不能只检出sqlite3并从本地文件夹中构建它并要求,因为sequelize要求它,它必须进入node_modules。
同时,一旦我们构建了正确的二进制文件,我们就想保留它,因为我们将需要在我们的应用程序中分发它。但是将所有节点模块都检入git是非常糟糕的。我们可以通过排除git来解决此问题,但是如果我们想更改nwjs的版本怎么办?同样的事情,必须记住每次构建sqlite3以及所有这些命令行选项是什么。 gh。
因此,简单的解决方案是将sqlite3检出到项目中的某个位置,并在提交时由git将其存储。然后看一下package.json,并将安装脚本更改为:
"scripts": {
"install": "node-pre-gyp install --build-from-source --runtime=node-webkit --target-arch=x64 --target=0.31.5",
"pretest": "node test/support/createdb.js",
"test": "mocha -R spec --timeout 480000"
},
替换您自己的拱门并在那里瞄准。
现在,返回项目的根目录,并从放置sqlite3的路径开始npm安装。
类似:
npm install ./sqlite3 --save
这将导致所有内容使用正确的nwjs版本和正确的二进制文件/路径等进行重建,并添加一个文件:对package.json的引用,以便下次您需要擦除node_modules并执行npm install,一切都会正常进行。
更新:
浏览sequelize的源代码时,我也遇到了这个问题:
try {
if (sequelize.config.dialectModulePath) {
this.lib = require(sequelize.config.dialectModulePath).verbose();
} else {
this.lib = require('sqlite3').verbose();
}
因此,您似乎可以将DialectModulePath作为选项来传递序列化配置并手动指定要加载的模块,这样可能会有所帮助。我在官方文档中找不到任何提及它的地方,而且我还没有亲自测试过,所以YMMV。