【问题标题】:Electron was compiled against a different Node.js versionElectron 是针对不同的 Node.js 版本编译的
【发布时间】:2021-02-19 11:41:38
【问题描述】:

我正在构建一个预计将在 Ubuntu 20.xx Linux 和 Raspberry Pi 上运行的 Electron 应用程序(运行 Raspbian 和 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

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

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

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

注意:要解决 #2,我可以继续使用这个咒语:

rm -rf node_modules
npm install
electron-rebuild

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

  • 可以(表面上)在这里找到神秘的 NODE_MODULE_VERSION 值(在这种情况下为 82 对 73)并将其与节点 semver 版本匹配:https://nodejs.org/en/download/releases/

  • 为当前版本的 Electron (v10.1.5) 记录 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_VERSION 72,而不是 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 运行时和我的 shell 环境中兼容,并且无需重新构建即可在两者中工作。

啊,但是怎么做呢?

更新:

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

【问题讨论】:

  • 你有这个解决方案吗,stackoverflow.com/questions/56249103/…
  • 感谢指点!我正在使用一些不同的本机模块(pi-spi、node-hid 和 usb-device)。我在我的 pi-spi 模块中尝试了推荐的构建步骤(这是我现在尝试运行 mocha 测试时失败的原因)。不幸的是,这不允许我在 mocha 中运行测试(即在 Electron 之外)。

标签: node.js npm electron mocha.js


【解决方案1】:

感谢 Mark Lee 与 Electron 的一些提示,我了解到我们可以像运行 node 一样运行 electron(无需启动完整的 GUI 体验)。

这让我去寻找一个使用电子二进制而不是节点的 mocha 包装器,然后我找到了这个库:electron-mocha

一个npm install --save-dev electron-mochaelectron-rebuild 之后,我已经从一个Makefile 在我的运行时环境旁边运行了测试!

不幸的是,electron-mocha 包装器似乎不支持 Mocha 的“监视”功能,但我通过使用 when-changed (link) Python 实用程序实现了该功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-28
    • 2022-01-06
    • 2019-12-03
    • 2020-12-22
    • 2018-03-05
    • 2021-04-18
    • 2017-12-07
    相关资源
    最近更新 更多