微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用ava时错误的NODE_MODULE_VERSION

如何解决使用ava时错误的NODE_MODULE_VERSION

我编写了一个使用nodegit的Electron应用程序。对于我的测试部分,我将ava与Spectron结合使用来测试我的应用程序。我所有的测试都有效-包括在我的应用中使用 nodegit 功能

除了上述测试,我还制作了一个 non-Electron 测试文件,可直接在其中导入nodegit。

 import * as nodegit from 'nodegit';

立即通过 ava 执行此测试,返回以下内容

node_modules\.pnpm\nodegit@0.27.0\node_modules\nodegit\build\Release\nodegit.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 82. This version of Node.js requires
NODE_MODULE_VERSION 83. Please try re-compiling or re-installing
the module (for instance,using `npm rebuild` or `npm install`).
    at Module._extensions..node (internal/modules/cjs/loader.js:1122:18)

82版究竟从何而来?我只安装了 nodejs 14.15.0,它按预期使用版本83。为什么 node 认为该版本与我的应用中实际工作的版本不匹配?这就是我的package.json的样子:

  "devDependencies": {
    "ava": "^3.13.0",},"scripts": {
    "ava": "node_modules/.bin/ava",...
  },"ava": {
    "files": [
      "*.ts"
    ],"extensions": [
      "ts"
    ],"require": [
      "ts-node/register"
    ],"nodeArguments": [
      "--napi-modules","--experimental-modules"
    ]
  },

我自己建立了nodegit,在config.gypi文件中,它甚至指向:

    "node_module_version": 83,

我做了一个非常简单的可复制示例:https://github.com/Githubber2021/node_module_version-issue

% node --version
14.15.0
% npm install
% npm run ava
... error

有人能解释这个错误或82版本的来源吗?

解决方法

这可能是两件事之一:

  1. 您正在加载的本机依赖项通过prebuild提供了预构建的二进制文件-可能是这种情况
  2. 您正在加载的本机依赖项将作为源代码下载,而构建二进制文件则由您决定。

根据nodegit的自述文件,

“ NodeGit可以直接在大多数系统上运行,而无需任何本地依赖项。”

但是看起来您至少需要nodegit@0.27.x才能从使用节点14获得预构建的二进制文件。Source

因此,您看到的82来自针对预编译二进制文件进行编译的ABI版本。由于您已经在使用nodegit@0.27.x,因此您最终会以某种错误的ABI的形式预生成二进制文件。

这是我使用的存储库,其中列出了不同版本的所有二进制文件,因此您可以了解如何发生:https://github.com/lovell/sharp/tree/v0.25.3

我在Electron中进行开发,对于Electron,我使用这样的命令来获取正确版本的Electron来运行npm rebuild

npm rebuild --runtime=electron --target=8.5.3 --disturl=https://atom.io/download/atom-shell

我确切地不知道对于普通节点是什么,但是请让我知道这是否会使您更接近,如果可以,我会找到可以找到的东西。

,

答案已经解决了,只需添加一种方法。

如前所述,无论每个 Node.js 的版本如何,您的 Node.Js 的 ABI(应用程序二进制接口)都可能与 Electron 使用的 Node.js 的 ABI 不同。

因此,您使用 NPM 安装了一个本机模块,该模块使用具有相应 NODE_MODULE_VERSION (ABI) 的 Node.js 构建正常,但是当 Electron 尝试使用它时,您会收到一个错误,要求您的模块使用 ABI 版本的Electron 中包含的 Node.js。

另一种方法:

像安装任何其他 Node 项目一样安装模块,然后使用 electron-rebuild 包为 Electron 重建。

npm install --save-dev electron-rebuild
./node_modules/.bin/electron-rebuild

注意事项

  1. 这将重建您已经构建的模块,但这次会自动查找您拥有的 Electron 版本的标头。
  2. 每次运行“npm install”时都需要重复此操作(或在 package.json 的脚本部分添加序列)。
  3. 使用“Electron Forge”,此工具会自动应用于开发或制作发行版。使用“Electron Packager”,您可以查看项目的自述文件。

来源: https://github.com/electron/electron-rebuild

,

嘿)我想我可以解决您的问题,只需尝试以下方法即可:

"engines": {
  "node": ">=14.0.0"
},

到package.json并删除node_modules并在项目目录中执行npm i。应该有帮助

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。