NODE_MODULE_VERSION incorrect lors de l'utilisation d'ava

Nov 01 2020

J'écris une application Electron qui utilise nodegit . Pour ma partie test, j'utilise ava en combinaison avec Spectron pour tester mon application. Tous mes tests fonctionnent, y compris les fonctions qui utilisent nodegit dans mon application.

En plus des tests décrits ci-dessus, j'ai également créé un fichier de test pur non électronique dans lequel j'importe directement nodegit.

 import * as nodegit from 'nodegit';

L'exécution de ce test maintenant via ava renvoie ceci:

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)

D'où vient exactement la version 82? Je n'ai installé que nodejs 14.15.0 , qui utilise la version 83comme prévu. Pourquoi node pense- t-il que la version est incompatible là où elle fonctionne réellement dans mon application? Voici à quoi package.jsonressemble mon :

  "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"
    ]
  },

Je nodegitme suis construit et dans le config.gypifichier il fait même référence:

    "node_module_version": 83,

J'ai fait un exemple reproductible super simple: https://github.com/Githubber2021/node_module_version-issue

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

Quelqu'un peut-il m'expliquer si c'est un bogue ou d'où vient la version 82?

Réponses

1 Slbox Nov 19 2020 at 06:46

Cela peut être l'une des deux choses suivantes:

  1. La dépendance native que vous chargez fournit des binaires prédéfinis via la pré - construction - C'est probablement le cas
  2. La dépendance native que vous chargez est téléchargée en tant que code source et la construction du binaire dépend de vous.

Selon le README de nodegit,

"NodeGit fonctionnera sur la plupart des systèmes prêts à l'emploi sans aucune dépendance native."

Mais il semble que vous ayez au minimum besoin [email protected]d'obtenir des binaires prédéfinis à partir de use Node 14. Source

Ainsi, le 82fichier que vous voyez provient de la version ABI avec laquelle le binaire préconstruit a été compilé. Puisque vous utilisez déjà [email protected], alors vous vous êtes retrouvé avec les binaires prédéfinis pour le mauvais ABI.

Voici un dépôt que j'utilise qui répertorie tous les différents binaires pour différentes versions, afin que vous puissiez voir comment cela peut se produire: https://github.com/lovell/sharp/tree/v0.25.3

Je développe en Electron et pour Electron, j'utilise une commande comme celle-ci pour obtenir la bonne version d'Electron à utiliser npm rebuild.

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

Je ne sais pas exactement ce qu'est l'équivalent pour un nœud simple, mais faites-moi savoir si cela vous rapproche et si c'est le cas, je vais voir ce que je peux trouver.

Pavel Nov 14 2020 at 21:01

Hey) Je pense que je peux résoudre votre problème, essayez ceci:

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

dans votre package.json et supprimez node_modules et faites npm i dans le répertoire de votre projet. Ça devrait aider