Electron 是针对不同的 Node.js 版本编译的
Electron was compiled against a different Node.js version
我正在构建一个 Electron 应用程序,预计 运行 在 Ubuntu 20.xx Linux 和 Raspberry Pi (运行 Raspbian and arch=armv7l) 并收到以下错误:
...was compiled against a different Node.js version using NODE_MODULE_VERSION 72.
This version of Node.js requires NODE_MODULE_VERSION 82.
我正在使用各种需要(node-gyp)编译为特定架构的本机模块,并且我正在使用 mocha 作为我的单元测试套件。
我通常在给定项目本地安装 node,这样我就可以将 node 和 npm 的版本锁定到项目需要的任何版本,而不用大惊小怪。
Electron Native Module Documentation 表示我应该 运行 electron-rebuild
得到这个版本错误后。
不幸的是,这对我来说有 2 个问题:
每次在测试和应用程序之间来回切换时,我都需要重建所有本机二进制文件,这是不可接受的。
如果我曾经 运行 npm rebuild
,electron-rebuild
的下一个 运行 成功退出而没有重建任何东西(可能是由于无效的缓存命中).
注意:为了解决#2,我可以继续这个咒语:
rm -rf node_modules
npm install
electron-rebuild
我在调查这个错误时学到了一些东西:
神秘的 NODE_MODULE_VERSION 值(在本例中为 82 vs 73)可以(表面上)在此处找到并匹配到节点 semver 版本:https://nodejs.org/en/download/releases/
当前版本的 Electron (v10.1.5) 的 Logging process.version
指示如下:
Launching Electron with:
{
node: '12.16.3',
v8: '8.5.210.26-electron.0',
uv: '1.34.2',
zlib: '1.2.11',
brotli: '1.0.7',
ares: '1.16.0',
modules: '82',
nghttp2: '1.41.0',
napi: '5',
llhttp: '2.0.4',
http_parser: '2.9.3',
openssl: '1.1.0',
icu: '67.1',
unicode: '13.0',
electron: '10.1.5',
chrome: '85.0.4183.121'
}
- release info for Node version 12.16.3(我安装的)表示NODE_MODULE_VERSION72,不是82。
- NODE_MODULE_VERSION 82 没有出现在 any node releases 中(我看到了)。
- Electron Native Module Docs 也表明如果我为了构建二进制文件而设置了一个比较大的环境变量集合,我可以直接使用 npm。当我尝试这样做时,构建失败并显示
Failed at the lzma-native@6.0.1 install script
.
总而言之,我想安装任何必要的东西,这样我的本地本地节点和 npm 二进制文件就可以在 Electron 运行time 和我的 shell 环境中兼容,并且可以在没有正在重建。
啊,但是怎么样?
更新:
FWIW,node-hid 已针对新版本 node/Electron 重写,所以我现在 运行ning Electron v11.0.3 和 node-hid v2.0.0-0。
感谢 Mark Lee 使用 Electron 的一些提示,我了解到我们可以 运行 electron
就像我们 运行 node
一样(无需启动完整的 GUI 体验)。
这让我去寻找一个使用电子二进制而不是节点的摩卡包装器,然后我找到了这个库:electron-mocha。
一个 npm install --save-dev electron-mocha
和 electron-rebuild
之后,我在我的 运行time 环境旁边从单个 Makefile 获得了测试 运行ning!
不幸的是,electron-mocha 包装器似乎不支持 Mocha 的“监视”功能,但我通过使用 when-changed
(link) Python实用程序。
我正在构建一个 Electron 应用程序,预计 运行 在 Ubuntu 20.xx Linux 和 Raspberry Pi (运行 Raspbian and arch=armv7l) 并收到以下错误:
...was compiled against a different Node.js version using NODE_MODULE_VERSION 72.
This version of Node.js requires NODE_MODULE_VERSION 82.
我正在使用各种需要(node-gyp)编译为特定架构的本机模块,并且我正在使用 mocha 作为我的单元测试套件。
我通常在给定项目本地安装 node,这样我就可以将 node 和 npm 的版本锁定到项目需要的任何版本,而不用大惊小怪。
Electron Native Module Documentation 表示我应该 运行 electron-rebuild
得到这个版本错误后。
不幸的是,这对我来说有 2 个问题:
每次在测试和应用程序之间来回切换时,我都需要重建所有本机二进制文件,这是不可接受的。
如果我曾经 运行
npm rebuild
,electron-rebuild
的下一个 运行 成功退出而没有重建任何东西(可能是由于无效的缓存命中).
注意:为了解决#2,我可以继续这个咒语:
rm -rf node_modules
npm install
electron-rebuild
我在调查这个错误时学到了一些东西:
神秘的 NODE_MODULE_VERSION 值(在本例中为 82 vs 73)可以(表面上)在此处找到并匹配到节点 semver 版本:https://nodejs.org/en/download/releases/
当前版本的 Electron (v10.1.5) 的 Logging
process.version
指示如下:
Launching Electron with:
{
node: '12.16.3',
v8: '8.5.210.26-electron.0',
uv: '1.34.2',
zlib: '1.2.11',
brotli: '1.0.7',
ares: '1.16.0',
modules: '82',
nghttp2: '1.41.0',
napi: '5',
llhttp: '2.0.4',
http_parser: '2.9.3',
openssl: '1.1.0',
icu: '67.1',
unicode: '13.0',
electron: '10.1.5',
chrome: '85.0.4183.121'
}
- release info for Node version 12.16.3(我安装的)表示NODE_MODULE_VERSION72,不是82。
- NODE_MODULE_VERSION 82 没有出现在 any node releases 中(我看到了)。
- Electron Native Module Docs 也表明如果我为了构建二进制文件而设置了一个比较大的环境变量集合,我可以直接使用 npm。当我尝试这样做时,构建失败并显示
Failed at the lzma-native@6.0.1 install script
.
总而言之,我想安装任何必要的东西,这样我的本地本地节点和 npm 二进制文件就可以在 Electron 运行time 和我的 shell 环境中兼容,并且可以在没有正在重建。
啊,但是怎么样?
更新:
FWIW,node-hid 已针对新版本 node/Electron 重写,所以我现在 运行ning Electron v11.0.3 和 node-hid v2.0.0-0。
感谢 Mark Lee 使用 Electron 的一些提示,我了解到我们可以 运行 electron
就像我们 运行 node
一样(无需启动完整的 GUI 体验)。
这让我去寻找一个使用电子二进制而不是节点的摩卡包装器,然后我找到了这个库:electron-mocha。
一个 npm install --save-dev electron-mocha
和 electron-rebuild
之后,我在我的 运行time 环境旁边从单个 Makefile 获得了测试 运行ning!
不幸的是,electron-mocha 包装器似乎不支持 Mocha 的“监视”功能,但我通过使用 when-changed
(link) Python实用程序。