NODE_MODULE_VERSION ไม่ถูกต้องเมื่อใช้ ava
ผมเขียนแอพพลิเคอิเลคตรอนที่ใช้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 มาจากไหน
คำตอบ
นี่อาจเป็นหนึ่งในสองสิ่ง:
- พึ่งพาพื้นเมืองคุณโหลดกำลังให้ไบนารีที่สร้างไว้ล่วงหน้าผ่านทางprebuild - นี้น่าจะเป็นกรณีที่
- การอ้างอิงดั้งเดิมที่คุณกำลังโหลดจะถูกดาวน์โหลดเป็นซอร์สโค้ดและการสร้างไบนารีนั้นขึ้นอยู่กับคุณ
ตาม README ของ nodegit
"NodeGit จะทำงานบนระบบส่วนใหญ่แบบสำเร็จรูปโดยไม่ต้องพึ่งพาเนทีฟใด ๆ "
แต่ดูเหมือนว่าคุณต้องมีขั้นต่ำ[email protected]ในการรับไบนารีที่สร้างไว้ล่วงหน้าจากการใช้ Node 14 Source
ดังนั้นสิ่งที่82คุณเห็นมาจากเวอร์ชัน ABI ที่ไบนารีที่สร้างไว้ล่วงหน้าถูกคอมไพล์ เนื่องจากคุณใช้งานอยู่[email protected]แล้วคุณจึงลงเอยด้วยไบนารีที่สร้างไว้ล่วงหน้าสำหรับ ABI ที่ไม่ถูกต้อง
นี่คือ repo ที่ฉันใช้ซึ่งแสดงรายการไบนารีต่างๆทั้งหมดสำหรับเวอร์ชันต่างๆดังนั้นคุณจะเห็นว่าสิ่งนี้อาจเกิดขึ้นได้อย่างไร: https://github.com/lovell/sharp/tree/v0.25.3
ผมพัฒนาในอิเลคตรอนและอิเล็กตรอนที่ผมใช้คำสั่งเช่นนี้จะได้รับรุ่นที่ถูกต้องของอิเลคตรอนที่จะทำงาน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 ในไดเร็กทอรีโปรเจ็กต์ของคุณ ก็น่าจะช่วยได้