在为 vscode 开发扩展时针对不同的 NODE_MODULE_VERSION 编译的模块
Module compiled against a different NODE_MODULE_VERSION when developing an extension for vscode
我试图在我的 vscode 扩展中使用节点的 tree-sitter 包,但我收到以下错误:
Activating extension 'extension name' failed: The module '.../node_modules/tree-sitter/build/Release/tree_sitter_runtime_binding.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 93. This version of Node.js requires
NODE_MODULE_VERSION 89. Please try re-compiling or re-installing
the module (for instance, using npm rebuild
or npm install
)..
据我了解,NODE_MODULE_VERSION 是节点 ABI 的版本。但是,我什至无法在 official website.
中找到具有 NODE_MODULE_VERSION 89 的节点版本
我尝试过的:
- 正在删除 node_modules 文件夹并重新安装包。
- 运行
npm rebuild tree-sitter --update-binary
来自顶级目录。
- 使用
node_modules/tree-sitter
目录中的 node-gyp rebuild
和 node-gyp rebuild --target=(my node version)
重建 tree-sitter 包。
- 使用 nvm 切换节点版本。
None 有帮助。我从 了解到更改节点版本无济于事,正如我在尝试时确认的那样
console.log(process.version); // v14.16.0
console.log(process.versions.modules); // 89
无论我使用哪个节点版本,这都会给出相同的输出。我也尝试使用该节点版本 node-gyp rebuild --target=14.16.0
重建 tree-sitter 包,但我得到了同样的错误,但是这次它说模块是使用 NODE_MODULE_VERSION 83 编译的,这与节点的站点一致说。
如何解决此错误?
感谢任何帮助。
正如我所怀疑的那样,vscode 扩展使用的节点 ABI 版本是 vscode 的内部电子使用的 ABI 版本。 According to this source
Native Node.js modules are supported by Electron, but since Electron has a different application binary interface (ABI) from a given Node.js binary (due to differences such as using Chromium's BoringSSL instead of OpenSSL), the native modules you use will need to be recompiled for Electron...
这解释了为什么我在节点的站点中找不到 NODE_MODULE_VERSION 89。
接下来,我检查了我构建的 vscode 使用的电子版本。为此,我简单地检查了 vscode 附带的 package.json(linux 上的 /usr/lib/code/package.json
,我猜它在安装在 vscode 的文件夹中在 windows).
接下来,按照 electron 站点的说明,使用包 electron-rebuild
重建模块。要指定目标版本,只需 运行
./node_modules/.bin/electron-rebuild -v [version]
但是,我没有这方面的来源,但似乎 tree-sitter 目前不支持较新版本的电子,因此构建失败。这似乎是因为 V8 的 API (according to this).
发生了变化
作者链接了他的解决方案here。我复制了他的修改,构建成功。
请注意,我必须用新建的节点插件替换现有的节点插件。
我试图在我的 vscode 扩展中使用节点的 tree-sitter 包,但我收到以下错误:
Activating extension 'extension name' failed: The module '.../node_modules/tree-sitter/build/Release/tree_sitter_runtime_binding.node' was compiled against a different Node.js version using NODE_MODULE_VERSION 93. This version of Node.js requires NODE_MODULE_VERSION 89. Please try re-compiling or re-installing the module (for instance, using
npm rebuild
ornpm install
)..
据我了解,NODE_MODULE_VERSION 是节点 ABI 的版本。但是,我什至无法在 official website.
中找到具有 NODE_MODULE_VERSION 89 的节点版本我尝试过的:
- 正在删除 node_modules 文件夹并重新安装包。
- 运行
npm rebuild tree-sitter --update-binary
来自顶级目录。 - 使用
node_modules/tree-sitter
目录中的node-gyp rebuild
和node-gyp rebuild --target=(my node version)
重建 tree-sitter 包。 - 使用 nvm 切换节点版本。
None 有帮助。我从
console.log(process.version); // v14.16.0
console.log(process.versions.modules); // 89
无论我使用哪个节点版本,这都会给出相同的输出。我也尝试使用该节点版本 node-gyp rebuild --target=14.16.0
重建 tree-sitter 包,但我得到了同样的错误,但是这次它说模块是使用 NODE_MODULE_VERSION 83 编译的,这与节点的站点一致说。
如何解决此错误? 感谢任何帮助。
正如我所怀疑的那样,vscode 扩展使用的节点 ABI 版本是 vscode 的内部电子使用的 ABI 版本。 According to this source
Native Node.js modules are supported by Electron, but since Electron has a different application binary interface (ABI) from a given Node.js binary (due to differences such as using Chromium's BoringSSL instead of OpenSSL), the native modules you use will need to be recompiled for Electron...
这解释了为什么我在节点的站点中找不到 NODE_MODULE_VERSION 89。
接下来,我检查了我构建的 vscode 使用的电子版本。为此,我简单地检查了 vscode 附带的 package.json(linux 上的 /usr/lib/code/package.json
,我猜它在安装在 vscode 的文件夹中在 windows).
接下来,按照 electron 站点的说明,使用包 electron-rebuild
重建模块。要指定目标版本,只需 运行
./node_modules/.bin/electron-rebuild -v [version]
但是,我没有这方面的来源,但似乎 tree-sitter 目前不支持较新版本的电子,因此构建失败。这似乎是因为 V8 的 API (according to this).
发生了变化作者链接了他的解决方案here。我复制了他的修改,构建成功。
请注意,我必须用新建的节点插件替换现有的节点插件。