- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
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.
最佳答案
您现在可能已经解决了这个问题,但如果其他人也遇到同样的问题,我是这样解决的。
基本问题是,sequelize 对“sqlite3”有要求,并且会自动从 node_modules 导入。
问题是,这破坏了整个“npm install”的事情,因为现在你必须输入这么长的命令行才能正确地为 nwjs 构建 sqlite。所以,如果你删除了你的node_modules,你必须每次都记住跳这个舞蹈,这很烦人。
不幸的是,我们不能只 checkout sqlite3 并构建它并从本地文件夹中进行需求,因为sequelize需要它的方式,它必须进入node_modules。
同时,一旦我们构建了正确的二进制文件,我们就想保留它,因为我们需要将它与我们的应用程序一起分发。但是将所有 Node 模块 checkin git 是非常糟糕的。我们可以通过 git 排除来解决这个问题,但是如果我们想更改 nwjs 的版本怎么办?同样的事情,每次构建 sqlite3 时都必须记住所有这些命令行选项是什么。呃。
因此,简单的解决方案是在项目中的某个位置 checkout sqlite3,当您提交时,它将由 git 存储。然后查看package.json,将安装脚本更改为:
“脚本”:{
“安装”:“node-pre-gyp install --build-from-source --runtime=node-webkit --target-arch=x64 --target=0.31.5”,
"pretest": "Node 测试/support/createdb.js",
“测试”:“摩卡-R规范--超时480000”
},
在那里替换你自己的拱门和目标。
现在,返回到项目的根目录,然后从放置 sqlite3 的路径进行 npm install。
类似于:
npm install ./sqlite3 --save
这将导致使用正确的 nwjs 版本和正确的二进制文件/路径等重建所有内容...并添加一个文件:对 package.json 的引用,以便下次需要清除 node_modules 并执行 npm 安装时,一切都会正常工作。
更新:浏览sequelize的源代码,我也遇到了这样的情况:
尝试 {
if (sequelize.config.dialectModulePath) {
this.lib = require(sequelize.config.dialectModulePath).verbose();
} 别的 {
this.lib = require('sqlite3').verbose();
}
所以看起来您可以将 dialectModulePath 作为选项传递给后续配置并手动指定要加载的模块,这样可能会有所帮助。我在官方文档中找不到任何提到它的地方,而且我也没有亲自测试过它,所以YMMV。
关于node.js - 如何将 Sequelize 和 SQLite3 与 NWJS 0.28.0 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48594188/
我是一名优秀的程序员,十分优秀!