NODE_MODULE_VERSION salah saat menggunakan ava
Saya menulis aplikasi Electron yang menggunakan nodegit . Untuk bagian pengujian saya, saya menggunakan ava dalam kombinasi dengan Spectron untuk menguji aplikasi saya. Semua pengujian saya berfungsi - termasuk fungsi yang menggunakan nodegit di aplikasi saya.
Selain tes yang dijelaskan di atas, saya juga membuat file tes non-Elektron murni di mana saya mengimpor nodegit secara langsung.
import * as nodegit from 'nodegit';
Menjalankan tes ini sekarang melalui ava mengembalikan ini:
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)
Dari mana tepatnya versi 82 berasal? Saya hanya menginstal nodejs 14.15.0 , yang menggunakan versi 83seperti yang diharapkan. Mengapa node menganggap versi tersebut tidak sesuai dengan yang sebenarnya berfungsi di aplikasi saya? Seperti inilah package.jsonpenampilanku:
"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"
]
},
Saya membuat nodegitsendiri dan dalam config.gypifile yang dirujuknya:
"node_module_version": 83,
Saya membuat contoh super sederhana yang dapat direproduksi: https://github.com/Githubber2021/node_module_version-issue
% node --version
14.15.0
% npm install
% npm run ava
... error
Adakah yang bisa menjelaskan kepada saya jika ini bug atau dari mana versi 82 berasal?
Jawaban
Ini bisa menjadi salah satu dari dua hal:
- Dependensi asli yang Anda muat menyediakan biner bawaan melalui prebuild - Ini mungkin masalahnya
- Dependensi asli yang Anda muat diunduh sebagai kode sumber dan membuat biner terserah Anda.
Menurut README nodegit,
"NodeGit akan bekerja pada sebagian besar sistem di luar kotak tanpa ketergantungan asli apa pun."
Tapi sepertinya Anda membutuhkan minimal [email protected]untuk mendapatkan binari prebuilt dari penggunaan Node 14. Source
Jadi yang 82Anda lihat berasal dari versi ABI tempat biner prebuilt dikompilasi. Karena Anda sudah menggunakan [email protected], maka entah bagaimana Anda berakhir dengan binari prebuilt untuk ABI yang salah.
Berikut adalah repo yang saya gunakan yang mencantumkan semua berbagai binari untuk versi berbeda, sehingga Anda dapat melihat bagaimana ini mungkin terjadi: https://github.com/lovell/sharp/tree/v0.25.3
Saya mengembangkan Elektron dan untuk Elektron saya menggunakan perintah seperti ini untuk mendapatkan versi Elektron yang benar untuk dijalankan npm rebuild.
npm rebuild --runtime=electron --target=8.5.3 --disturl=https://atom.io/download/atom-shell
Saya tidak tahu persis apa padanannya untuk node biasa, tetapi beri tahu saya jika ini membuat Anda lebih dekat dan jika demikian saya akan melihat apa yang dapat saya temukan.
Hei) Saya pikir saya bisa menyelesaikan masalah Anda, coba saja ini:
"engines": {
"node": ">=14.0.0"
},
ke package.json Anda dan hapus node_modules dan lakukan npm i di direktori proyek Anda. Ini akan membantu