Dan*_*ens 5 node.js nodegit electron ava spectron
我编写了一个使用nodegit的 Electron 应用程序。对于我的测试部分,我结合使用ava和 Spectron 来测试我的应用程序。我的所有测试都有效 - 包括在我的应用程序中使用nodegit 的功能。
除了上述测试之外,我还制作了一个纯非 Electron测试文件,在其中直接导入 nodegit。
import * as nodegit from 'nodegit';
Run Code Online (Sandbox Code Playgroud)
现在通过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)
Run Code Online (Sandbox Code Playgroud)
82版本到底来自哪里?我只安装了nodejs 14.15.0,它使用了83预期的版本。为什么节点认为该版本与我的应用程序中实际运行的版本不匹配?这就是我的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"
]
},
Run Code Online (Sandbox Code Playgroud)
我nodegit自己构建,在config.gypi文件中它甚至引用了:
"node_module_version": 83,
Run Code Online (Sandbox Code Playgroud)
我做了一个超级简单的可重现示例:https ://github.com/Githubber2021/node_module_version-issue
% node --version
14.15.0
% npm install
% npm run ava
... error
Run Code Online (Sandbox Code Playgroud)
谁能解释一下这是一个错误还是 82 版本来自哪里?
小智 5
答案已经解决了,只需添加一种方法即可。
如前所述,无论每个 Node.js 的版本如何,Node.J 的 ABI(应用程序二进制接口)可能与 Electron 使用的 Node.js 的 ABI 不同。
因此,您使用 NPM 安装一个本机模块,该模块使用具有相应 NODE_MODULE_VERSION (ABI) 的 Node.js 构建正常,但是当 Electron 尝试使用它时,您会收到错误,要求您的模块使用 Node.js 的 ABI 版本。 Electron.js 包含在 Electron 中。
另一种方法:
像任何其他 Node 项目一样安装模块,然后使用electro-rebuild包为 Electron 进行重建。
npm install --save-dev electron-rebuild
./node_modules/.bin/electron-rebuild
Run Code Online (Sandbox Code Playgroud)
笔记
来源: https: //github.com/electron/electron-rebuild
| 归档时间: |
|
| 查看次数: |
3331 次 |
| 最近记录: |