如何告诉 Visual Studio 从源代码编译的代码在哪里可以找到 sqlite 模块?
How to tell Visual Studio Code compiled from source where to find sqlite module?
我正在构建 Visual Studio 来自从 git 存储库检出的源代码:
git clone https://github.com/microsoft/vscode
我正在构建使用:
export NODE_OPTIONS=--max_old_space_size=2048
./scripts/npm.sh install --arch=armhf
./scripts/code.sh
我在 Raspberry PI 4 上使用节点 10.16.3,使用 Raspbian buster
构建期间没有错误。
安装会在第一个 运行 上下载 electron 的预编译版本。
但是每次我尝试 运行 代码时,它都会启动但出现错误:
[存储state.vscdb] open(): 由于错误无法打开数据库:找不到模块'../build/Release/sqlite
如果我查看 node_modules/vscode-sqlite3/build/Release/
我可以看到:
sqlite3.a
sqlite.a
我不清楚为什么 electron/vscode 找不到这个库。对于如何告诉 运行time 在哪里寻找模块的任何指示,我将不胜感激。
在检查构建脚本并经过许多痛苦的实验后,我发现并解决了导致此错误的 2 个问题。
- 留下 .a 静态库的事实暗示
binding.gyp
、config.gpy
and/or makefile 中的某些设置是错误的,因为本机节点模块通常是动态库.node 扩展名。 vscode-sqlite3
下的 binding.gyp
文件中的一个条件行似乎是罪魁祸首:
...
["target_arch=='arm'", {"type": "static_library"}]
...
禁用该行(通过删除它或将 'arm' 更改为其他内容)然后 运行:
node-gyp configure
在构建目录下重新生成 config.gpy 文件。然后构建模块:
node-gyp build
将在build/Release中生成一个sqlite.node
。
- 不幸的是,最新的电子 ABI 版本很少与 Node.js 版本匹配。在我的配置中,电子 ABI 版本是 72 (v6.0.12) 但最新的稳定节点版本是 ABI 64。因此我们必须做一个
electron-rebuild
来更新 sqlite.node 以匹配电子版本.
为此,您必须先安装 electron-rebuild
(yarn add electron-rebuild),然后 运行 electron-rebuild,方法是明确提供电子二进制文件的版本号 vscode 下载:
electron-rebuild -v 6.0.12 -m /home/dev/vscode -o vscode-sqlite3
当然,您必须说明您正在构建的特定电子版本的版本号。
(选项的含义请自行查找electron-rebuild --help
,重建二进制模块需要一段时间...)
然后可以将生成的 sqlite.node
移到 build/Release/ 中。 vscode 项目目录下的目录。瞧,我们有一个适用于 Raspbian!
的最新版本 VS-Code
我正在构建 Visual Studio 来自从 git 存储库检出的源代码:
git clone https://github.com/microsoft/vscode
我正在构建使用:
export NODE_OPTIONS=--max_old_space_size=2048
./scripts/npm.sh install --arch=armhf
./scripts/code.sh
我在 Raspberry PI 4 上使用节点 10.16.3,使用 Raspbian buster
构建期间没有错误。
安装会在第一个 运行 上下载 electron 的预编译版本。
但是每次我尝试 运行 代码时,它都会启动但出现错误:
[存储state.vscdb] open(): 由于错误无法打开数据库:找不到模块'../build/Release/sqlite
如果我查看 node_modules/vscode-sqlite3/build/Release/
我可以看到:
sqlite3.a sqlite.a
我不清楚为什么 electron/vscode 找不到这个库。对于如何告诉 运行time 在哪里寻找模块的任何指示,我将不胜感激。
在检查构建脚本并经过许多痛苦的实验后,我发现并解决了导致此错误的 2 个问题。
- 留下 .a 静态库的事实暗示
binding.gyp
、config.gpy
and/or makefile 中的某些设置是错误的,因为本机节点模块通常是动态库.node 扩展名。vscode-sqlite3
下的binding.gyp
文件中的一个条件行似乎是罪魁祸首:... ["target_arch=='arm'", {"type": "static_library"}] ...
禁用该行(通过删除它或将 'arm' 更改为其他内容)然后 运行:
node-gyp configure
在构建目录下重新生成 config.gpy 文件。然后构建模块:
node-gyp build
将在build/Release中生成一个sqlite.node
。
- 不幸的是,最新的电子 ABI 版本很少与 Node.js 版本匹配。在我的配置中,电子 ABI 版本是 72 (v6.0.12) 但最新的稳定节点版本是 ABI 64。因此我们必须做一个
electron-rebuild
来更新 sqlite.node 以匹配电子版本.
为此,您必须先安装 electron-rebuild
(yarn add electron-rebuild),然后 运行 electron-rebuild,方法是明确提供电子二进制文件的版本号 vscode 下载:
electron-rebuild -v 6.0.12 -m /home/dev/vscode -o vscode-sqlite3
当然,您必须说明您正在构建的特定电子版本的版本号。
(选项的含义请自行查找electron-rebuild --help
,重建二进制模块需要一段时间...)
然后可以将生成的 sqlite.node
移到 build/Release/ 中。 vscode 项目目录下的目录。瞧,我们有一个适用于 Raspbian!