".node不是一个有效的Win32应用程序"

4
在 Windows 10 Home(x64位)上,我尝试在命令提示符中运行以下命令:

node index.js

错误信息如下:

C:\Users\cooldudeasateen\OneDrive\Coding\sil\node_modules\bindings\bindings.js:121 throw e; ^

错误: \?\C:\Users\cooldudeasateen\OneDrive\Coding\sil\node_modules\better-sqlite3\build\Release\better_sqlite3.node 不是有效的 Win32 应用程序。 \?\C:\Users\humay\OneDrive\Coding\sil\node_modules\better-sqlite3\build\Release\better_sqlite3.node 在 Object.Module._extensions..node (node:internal/modules/cjs/loader:1183:18) 中加载模块。 在 Module.load (node:internal/modules/cjs/loader:981:32) 中加载模块。 在 Function.Module._load (node:internal/modules/cjs/loader:822:12) 中加载模块。 在 Module.require (node:internal/modules/cjs/loader:1005:19) 中加载模块。 使用 require (node:internal/modules/cjs/helpers:94:18) 调用 bindings (C:\Users\cooldudeasateen\OneDrive\Coding\sil\node_modules\bindings\bindings.js:112:48)。 在 Object. (C:\Users\cooldudeasateen\OneDrive\Coding\sil\node_modules\better-sqlite3\lib\database.js:9:24) 中加载模块。 在 Module._compile (node:internal/modules/cjs/loader:1101:14) 中加载模块。 在 Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10) 中加载模块。 在 Module.load (node:internal/modules/cjs/loader:981:32) 中加载模块。 在 Function.Module._load (node:internal/modules/cjs/loader:822:12) 中加载模块。 在 Module.require (node:internal/modules/cjs/loader:1005:19) 中加载模块。 使用 require (node:internal/modules/cjs/helpers:94:18) 调用 Object. (C:\Users\cooldudeasateen\OneDrive\Coding\sil\node_modules\better-sqlite3\lib\index.js:2:18)。 在 Module._compile (node:internal/modules/cjs/loader:1101:14) 中加载模块。 在 Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10) { code: 'ERR_DLOPEN_FAILED' }

我正在使用以下的Node版本:v16.6.2。
3个回答

5

现在我不需要帮助了,问题是我安装的是x86而不是x64,这是一个诚实的错误。

我怎么知道我犯了这个错误? 老实说,我看了其他版本的Nodejs的文件,它们都以x64结尾而不是x86。老实说,在安装新的Nodejs版本之前,我应该先看看它们。


2
感谢您分享答案:您还可以输入node -p "process.arch"来确定是否为64位。 - dylanh724

3
许多Node模块只是JavaScript,可以在各种系统上使用。但是有些模块包含本地编译的代码。您正在使用的SQLite库不是“纯JavaScript”,而是依赖于二进制文件。
当您运行npm install时,它会安装适用于您当前所使用的系统的二进制文件,例如,您使用的是Mac。 better_sqlite3.node 文件是针对该特定操作系统的。
然后,您在另一台计算机上打开了此项目,但同时也复制了node_modules目录。就像无法在Windows上运行.app文件或(通常)在Linux上运行.exe文件一样,此二进制文件与您的操作系统不兼容。删除然后重新安装SQLite库将安装与Windows兼容的二进制文件。
由于您的项目位于OneDrive文件夹中,可能会在不同的操作系统之间切换。这可能会使此过程变得繁琐。一种解决方法是全局安装SQLite模块,但这样做有一些缺点。 require()将不仅查找当前目录,还会递归查找其上面的目录(例如...\OneDrive\Coding\sil,然后是...\OneDrive\Coding,最后是...\OneDrive),然后检查全局目录。

问题是我没有切换操作系统。另一个要点是,我使用的是Node.js v14升级到v16,而且我使用的是相同版本的Windows 10,相同的架构和位数。 - SImplehDUde

3
对我来说,我需要删除node_modules文件夹并重新运行npm install。最有可能的原因是当我第一次安装包时出现了一些问题...
我还确保我的Node是x64,使用node -p "process.arch",如评论中所述。

我在寻找这个节点 -p "process.arch",谢谢伙计 Node V16.14.0只有x32版本,没有x64版本,将版本更改为x64后,它正常工作了。 - Pradeep Yenkuwale

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接