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 的解决方案。也许它与您的步骤类似,只需一个命令,pythonwin 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 模块,但无论如何的主要内容,如果未能解决你的问题,请参考以下文章

如何欺骗 Node.js 将 .js 文件加载为 ES6 模块?

node.js 模块化

Node-模块加载及包

Node.js 模块加载及包的管理

模块的加载机制 丨Node.js模块化

sqlite3模块中的ROW_NUMBER函数