sqlite3不起作用的原因
npm install --global --production windows-build-tools
sqlite3不起作用的原因有三:
1.当使用npm install sqlite3
安装节点sqlite3时,它获取所有依赖项并安装它。然后获取目标架构和平台的预编译二进制绑定文件。在我的例子中,我们希望napi-v6-darwin-unknown-arm64
用于ARM 64,达尔文用于Apple M1。目前还没有可用于此Apple ARM 64的预编译二进制文件,即使有,下一段将详细说明为什么它仍然不起作用。
1.问题在于,它使用二进制编译包node-pre-gyp
来确定系统的平台和架构,而这正是Github issue的救星,它详细说明了node-pre-gyp
如何无法正确处理ARM架构检测,基本上将所有内容都搞混了。因为它无法正确检测,即使我们在安装时构建自己的--build-from-source
绑定,它仍然无法工作,因为它为错误的架构编译了错误的绑定文件。更糟糕的是,如果我们不使用--build-from-source
,它只是简单地获取Intel预编译的绑定文件。napi-v6-darwin-unknown-x64
1.由于某种原因,在运行时,它现在可以正确检测架构,并尝试查找绑定文件的ARM 64版本,但它找不到,并将抛出napi-v6-darwin-unknown-arm64
的"module not found“错误。显然,它找不到,即使找到了,也将抛出错误的架构错误,因为我们在napi-v6-darwin-unknown-x64
板上安装了英特尔版本。
经过4天的努力,我终于找到了工作:
1.卸载sqlite3:npm uninstall sqlite3
1.安装一个全新的sqlite3,从源代码构建它,指定目标arch,并使用带有node-pre-gyp的回退构建,以确保安全:npm install sqlite3 --build-from-source --target_arch=arm64 --fallback-to-build
1.现在,已针对正确的平台和架构编译了正确的绑定文件,在运行时它将找到并运行!
-
安装windows-build-tools
npm install --g --production windows-build-tools
-
删掉lock文件、node_modules重新执行npm install / yarn 安装依赖
npm install