Electron 是针对不同的 Node.js 版本编译的

2024-02-18

我正在构建一个预计在 Ubuntu 20.xx Linux 和 Raspberry Pi(运行 Raspbian 和 arch=armv7l)上运行的 Electron 应用程序,但收到以下错误:

...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 的版本锁定到项目所需的任何版本,而无需太多麻烦。

电子本机模块文档 https://www.electronjs.org/docs/tutorial/using-native-node-modules表明我应该运行electron-rebuild收到此版本错误后。

不幸的是,这对我来说有两个问题:

  1. 每次在测试和应用程序之间来回切换时,我都需要重建所有本机二进制文件,这是不可接受的。

  2. 如果我曾经跑步npm rebuild,下一次运行electron-rebuild成功退出而不重建任何内容(可能是由于无效的缓存命中)。

NOTE:为了解决#2,我可以继续使用这个咒语:

rm -rf node_modules
npm install
electron-rebuild

在调查此错误时我学到了一些东西:

  • 神秘的 NODE_MODULE_VERSION 值(在本例中为 82 与 73)可以(表面上)在此处找到并与节点 semver 版本匹配:https://nodejs.org/en/download/releases/ https://nodejs.org/en/download/releases/

  • Logging process.version对于当前版本的 Electron (v10.1.5) 表示如下:

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'
}
  • The Node 版本 12.16.3 的发布信息 https://nodejs.org/en/download/releases/#ref-1(我已安装)指示 NODE_MODULE_VERSION 72,而不是 82。
  • NODE_MODULE_VERSION 82 未出现在任何节点发布 https://nodejs.org/en/download/releases/(我看到的)。
  • Electron Native 模块文档 https://www.electronjs.org/docs/tutorial/using-native-node-modules还表明如果我设置相对较大的环境变量集合来构建二进制文件,我可以直接使用 npm。当我尝试这样做时,构建失败,Failed at the [email protected] /cdn-cgi/l/email-protection install script.

总之,我想安装任何必要的东西,以便我的本地本机节点和 npm 二进制文件在 Electron 运行时和我的 shell 环境中兼容,并且无需重建即可在两者中工作。

啊,但是怎么样?

Update:

FWIW,node-hid 已针对较新版本的node/Electron 进行了重写,因此我现在运行的是Electron v11.0.3 和node-hid v2.0.0-0。


感谢来自的一些提示Mark Lee https://github.com/malept通过 Electron,我了解到我们可以运行electron就像我们跑步一样node(无需启动完整的 GUI 体验)。

这让我去寻找一个使用电子二进制文件而不是节点的摩卡包装器,然后我找到了这个库:电子摩卡 https://github.com/jprichardson/electron-mocha.

One npm install --save-dev electron-mocha and electron-rebuild后来,我通过一个 Makefile 在我的运行时环境旁边运行了测试!

不幸的是,电子摩卡包装器似乎不支持摩卡的“手表”功能,但我通过使用when-changed (link https://github.com/joh/when-changed) Python 实用程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Electron 是针对不同的 Node.js 版本编译的 的相关文章

随机推荐