Неверный NODE_MODULE_VERSION при использовании ava

Nov 01 2020

Я пишу приложение 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?

Ответы

1 Slbox Nov 19 2020 at 06:46

Это может быть одно из двух:

  1. Встроенная зависимость, которую вы загружаете, предоставляет предварительно созданные двоичные файлы через предварительную сборку - это, вероятно, так.
  2. Встроенная зависимость, которую вы загружаете, загружается как исходный код, а создание двоичного файла зависит от вас.

Согласно 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

Я не знаю точно, что эквивалентно для простого узла, но дайте мне знать, если это приблизит вас, и если да, я посмотрю, что я могу найти.

Pavel Nov 14 2020 at 21:01

Привет) Думаю, я смогу решить вашу проблему, просто попробуйте следующее:

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

в свой package.json, удалите node_modules и выполните npm i в каталоге проекта. Это должно помочь