如何解决使用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版本的来源吗?
解决方法
这可能是两件事之一:
- 您正在加载的本机依赖项通过prebuild提供了预构建的二进制文件-可能是这种情况
- 您正在加载的本机依赖项将作为源代码下载,而构建二进制文件则由您决定。
根据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
注意事项
- 这将重建您已经构建的模块,但这次会自动查找您拥有的 Electron 版本的标头。
- 每次运行“npm install”时都需要重复此操作(或在 package.json 的脚本部分添加序列)。
- 使用“Electron Forge”,此工具会自动应用于开发或制作发行版。使用“Electron Packager”,您可以查看项目的自述文件。
来源: https://github.com/electron/electron-rebuild
,嘿)我想我可以解决您的问题,只需尝试以下方法即可:
"engines": {
"node": ">=14.0.0"
},
到package.json并删除node_modules并在项目目录中执行npm i。应该有帮助
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。