Node.js 说它不能加载 sqlite3 模块,但无论如何
Posted
技术标签:
【中文标题】Node.js 说它不能加载 sqlite3 模块,但无论如何【英文标题】:Node.js says it can't load sqlite3 module, but does anyway 【发布时间】:2013-12-11 21:01:55 【问题描述】:我正在使用新的Node.js Tools for Visual Studio 并包含sqlite3 npm module。当我调用require('sqlite3')
时,它会抛出错误:
Error: Cannot find module './binding\Debug\node-v11-win32-ia32\node_sqlite3.node'
奇怪的是,当我忽略错误并继续运行代码时,一切正常……直到我所在的函数返回;然后服务器崩溃。
还有其他人遇到过这个问题吗?我怀疑它与 ./binding
部分有关,但不知道从哪里开始找出原因。
【问题讨论】:
您是否将node-gyp
安装为全局包?像 sqlite3
这样的原生插件需要它才能正确安装。
我没有。但是刚装了,重装了sqlite3包,没有任何变化。我还尝试将 require
调用包装在 try/catch 中;甚至没有发现错误。
下次可以尝试从 npm 显式安装旧版本。
你看到了吗? github.com/mapbox/node-sqlite3/wiki/Building-On-Windows
我通过将我的 Node 版本从 12 降级到 10 来解决这个问题。
【参考方案1】:
这似乎是sqlite3
npm 包本身的问题。存在 lib\binding\Release\
文件夹,但不存在 lib\binding\Debug\
文件夹。我刚刚创建了Release
文件夹的副本,将其命名为Debug
,一切正常。
【讨论】:
【参考方案2】:使用这个:-
npm install sqlite3 --build-from-source
【讨论】:
正确答案。这会在使用的环境架构中构建它。 这对我不起作用,但下面的 tarball 安装有效。奇数。 不好。你会在别人的代码中得到一堆编译错误,而不是包管理器只是安装依赖项。 这对我根本不起作用。我得到了大量的错误和弃用消息列表,然后它退出了。【参考方案3】:这对我有用:https://www.npmjs.com/package/sqlite3
npm install https://github.com/mapbox/node-sqlite3/tarball/master
【讨论】:
这对我也有效(mac 10.10.3)。知道为什么吗? 我也是。感谢您的建议 适用于 win 10。【参考方案4】:发件人:https://github.com/mapbox/node-sqlite3/wiki/Building-On-Windows
-
安装所需软件:
Python 2.x:https://www.python.org/downloads/release/python-2711/
Win SDK:http://www.microsoft.com/en-us/download/details.aspx?displayLang=en&id=8279
Microsoft Visual Studio 2010+:https://www.microsoft.com/es-es/download/details.aspx?id=48217
构建:
npm install sqlite
npm install
node-gyp configure build
【讨论】:
第二个链接win sdk,点击下载时不起作用。 @Timo Post 更新了一个新的 URL。请对其进行测试,并让我们知道它是否有效。 你知道是否可以使用已经安装在我的盒子上的python 3
。我使用了 Demodave 的解决方案。也许它与您的步骤类似,只需一个命令,python
和 win sdk
需要?但是,我的node_modules
文件夹现在是在安装node-sqlite
100 mb 之后,所以对于像sdk
这样的附加软件似乎没有太多负载。【参考方案5】:
要跳过搜索预编译的二进制文件并强制从源代码构建,请使用
npm install --build-from-source
【讨论】:
不好。你会在别人的代码中得到一堆编译错误,而不是包管理器只是安装依赖项。【参考方案6】:我遇到了这样的问题,我的node
版本是v10.16.3
这个全局安装的 sqlite3 在加载时会出错 require('sqlite3')
通过在项目本地安装一个 sqlite3 解决了。
$ npm install sqlite3
注意没有 -g 选项,它对我有用。
【讨论】:
【参考方案7】:如果上述方法对任何人都不起作用,那么这对我有用:
sudo apt install node-sqlite3
(我正在使用带有 Vscode 作为编辑器的 Ubuntu)。似乎安装这个 node-sqlite3 模块是被识别的。
【讨论】:
以上是关于Node.js 说它不能加载 sqlite3 模块,但无论如何的主要内容,如果未能解决你的问题,请参考以下文章