如何告诉 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 个问题。

  1. 留下 .a 静态库的事实暗示 binding.gypconfig.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

  1. 不幸的是,最新的电子 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