Ava kullanılırken yanlış NODE_MODULE_VERSION

Nov 01 2020

Nodegit kullanan bir Electron uygulaması yazıyorum . Test bölümümde , uygulamamı test etmek için ava'yı Spectron ile birlikte kullanıyorum . Uygulamamda nodegit kullanan işlevler dahil tüm testlerim çalışıyor .

Yukarıda açıklanan testlere ek olarak, doğrudan nodegit'i içe aktardığım saf Elektron olmayan bir test dosyası da yaptım.

 import * as nodegit from 'nodegit';

Bu testi şimdi ava aracılığıyla yürütmek şunu döndürür:

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)

Sürüm 82 tam olarak nereden geliyor? Yalnızca sürümü beklendiği gibi kullanan nodej'lerim var . Neden gelmez düğüm versiyonu benim app gerçekten çalışıyor bir uyumsuzluk olduğunu düşünüyorum? Şöyle görünüyor:14.15.083package.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"
    ]
  },

Kendimi inşa ettim nodegitve config.gypidosyada bile şunu ifade ediyor:

    "node_module_version": 83,

Süper basit tekrarlanabilir bir örnek yaptım: https://github.com/Githubber2021/node_module_version-issue

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

Bunun bir hata olup olmadığını veya sürüm 82'nin nereden geldiğini kimse bana açıklayabilir mi?

Yanıtlar

1 Slbox Nov 19 2020 at 06:46

Bu iki şeyden biri olabilir:

  1. Yüklediğiniz yerel bağımlılık, önceden oluşturulmuş ikili dosyalar sağlar - Bu muhtemelen böyledir
  2. Yüklediğiniz yerel bağımlılık, kaynak kodu olarak indirilir ve ikili dosyayı oluşturmak size bağlıdır.

Nodegit'in README'sine göre,

"NodeGit, herhangi bir yerel bağımlılık olmadan kullanıma hazır çoğu sistemde çalışacaktır."

Ancak en azından [email protected]Düğüm 14'ü kullanarak önceden oluşturulmuş ikili dosyalar almanız gerektiği görülüyor. Kaynak

Yani 82gördüğünüz, önceden oluşturulmuş ikilinin karşı derlendiği ABI sürümünden geliyor. Zaten kullandığınız için [email protected], bir şekilde yanlış ABI için önceden oluşturulmuş ikili dosyalar elde ettiniz.

İşte farklı sürümler için çeşitli ikili dosyaları listeleyen kullandığım bir depo, böylece bunun nasıl olabileceğini görebilirsiniz: https://github.com/lovell/sharp/tree/v0.25.3

Electron'da geliştiriyorum ve Electron için bunun gibi bir komut kullanarak Electron'un doğru sürümünü çalıştırıyorum npm rebuild.

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

Düz düğüm için eşdeğerinin tam olarak ne olduğunu bilmiyorum , ancak bu sizi yaklaştırırsa bana bildirin ve eğer öyleyse ne bulabileceğime bakayım.

Pavel Nov 14 2020 at 21:01

Hey) Sanırım problemini çözebilirim, sadece şunu dene:

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

package.json dosyanıza ekleyin ve node_modules'i kaldırın ve proje dizininizde npm i yapın. Yardımcı olmalı