Неверный NODE_MODULE_VERSION при использовании ava
Я пишу приложение Electron, использующее nodegit . В своей тестовой части я использую ava в сочетании со Spectron для тестирования моего приложения. Все мои тесты работают, включая функции, которые используют nodegit в моем приложении.
В дополнение к тестам, описанным выше, я сделал также чистый тестовый файл, не связанный с электроном, в который я напрямую импортирую nodegit.
import * as nodegit from 'nodegit';
Выполнение этого теста сейчас через ava возвращает следующее:
node_modules\.pnpm\[email protected]\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как и ожидалось. Почему узел считает, что версия не соответствует действительности в моем приложении? Вот как 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?
Ответы
Это может быть одно из двух:
- Встроенная зависимость, которую вы загружаете, предоставляет предварительно созданные двоичные файлы через предварительную сборку - это, вероятно, так.
- Встроенная зависимость, которую вы загружаете, загружается как исходный код, а создание двоичного файла зависит от вас.
Согласно README nodegit,
«NodeGit будет работать на большинстве систем сразу после установки без каких-либо собственных зависимостей».
Но похоже, что вам нужно как минимум [email protected]получить предварительно скомпилированные двоичные файлы с помощью Node 14. Исходный код
Итак, то, 82что вы видите, исходит из версии ABI, для которой был скомпилирован предварительно собранный двоичный файл. Поскольку вы уже используете [email protected], то каким-то образом вы получили предварительно созданные двоичные файлы для неправильного 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
Я не знаю точно, что эквивалентно для простого узла, но дайте мне знать, если это приблизит вас, и если да, я посмотрю, что я могу найти.
Привет) Думаю, я смогу решить вашу проблему, просто попробуйте следующее:
"engines": {
"node": ">=14.0.0"
},
в свой package.json, удалите node_modules и выполните npm i в каталоге проекта. Это должно помочь