Node - รวบรวมกับ Node.js เวอร์ชั่นอื่นโดยใช้ NODE_MODULE_VERSION 51


142

ฉันกำลังรันแอปพลิเคชันโหนดบนเทอร์มินัล เพิ่งอัพเกรดเป็นโหนด v8.5.0 แต่ได้รับข้อผิดพลาดนี้:

Error: The module '/tidee/tidee-au/packages/tidee-au-server/node_modules/bcrypt/lib/binding/bcrypt_lib.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 51. This version of Node.js requires
NODE_MODULE_VERSION 57. Please try re-compiling or re-installing
the module (for instance, using `npm rebuild` or `npm install`).
    at Object.Module._extensions..node (module.js:653:18)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/tidee/tidee-au/packages/tidee-au-server/node_modules/bcrypt/bcrypt.js:6:16)
    at Module._compile (module.js:624:30)
    at Module._extensions..js (module.js:635:10)
    at Object.require.extensions.(anonymous function) [as .js] (/tidee/tidee-au/packages/tidee-au-server/node_modules/babel-register/lib/node.js:152:7)
    at Module.load (module.js:545:32)
    at tryModuleLoad (module.js:508:12)
    at Function.Module._load (module.js:500:3)
    at Module.require (module.js:568:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/tidee/tidee-au/packages/tidee-au-server/server/helpers/encryptPass.js:1:16)

ความคิดวิธีการแก้ปัญหานี้?


โปรดทำเครื่องหมายคำตอบที่ถูกต้อง
Shanika Ediriweera

คำตอบ:


119

คุณต้องลบโฟลเดอร์โมดูล ( bcrypt) ออกจากnode_modulesโฟลเดอร์และติดตั้งใหม่ใช้คำสั่งต่อไปนี้:

$ rm -rf node_modules/bcrypt
$ npm install
// or
$ yarn

7
ใช้งานไม่ได้ สำหรับฉันปัญหาอยู่กับzmqแพคเกจและการสร้างใหม่หรือการลบและnpm installingอีกครั้งไม่ได้ช่วย ปัญหาเดียวกันเสมอ
trusktr

7
@trusktr พยายามลบโฟลเดอร์ node_modules โดยสมบูรณ์: rm -rf node_modules. ล้างแคช npm:, npm cache clearลบ package-lock.json หรือ npm-shrinkwrap.json npm iและหลังจากที่ทำงาน
alexmac

1
มีข้อความที่ดี "ฉันหวังว่าคุณจะรู้ว่าคุณกำลังทำอะไรอยู่" เมื่อฉันทำแคชนั้นชัดเจน ฉันไม่มาก แต่เห็นได้ชัดว่าคุณทำ! มันได้ผล
ouflak

คุณไม่จำเป็นต้องทำ / ไม่ต้องnpm cache clearทำคำสั่งอื่น ๆ
caub

ทำงานให้ฉัน! ข้อผิดพลาดที่แน่นอนของฉันคือ - "โมดูล '/ Users / <username> / ดาวน์โหลด / คำนำ -to-graphql / node_modules / bcrypt / lib / binding / bcrypt_lib. โหนด' ถูกคอมไพล์กับ Node.js รุ่นอื่นโดยใช้ NODE_MODULE_VERSION 64"
theusual

73

ฉันมีปัญหาเดียวกันและไม่มีการกล่าวถึงที่นี่ทำงานให้ฉัน นี่คือสิ่งที่ทำงานให้ฉัน:

  1. ต้องการการอ้างอิงทั้งหมดที่คุณต้องการในmain.jsไฟล์ที่เรียกใช้โดยอิเล็กตรอน (นี่ดูเหมือนจะเป็นส่วนสำคัญแรกสำหรับฉัน)
  2. เรียกใช้npm i -D electron-rebuildเพื่อเพิ่มอิเล็กตรอนสร้างแพคเกจ
  3. ลบnode-modulesโฟลเดอร์รวมถึงpackages-lock.jsonไฟล์
  4. เรียกใช้npm iเพื่อติดตั้งโมดูลทั้งหมด
  5. เรียกใช้./node_modules/.bin/electron-rebuild( .\node_modules\.bin\electron-rebuild.cmdสำหรับ Windows) เพื่อสร้างใหม่ทุกอย่าง

มันสำคัญมากที่ต้องทำงาน./node_modules/.bin/electron-rebuildโดยตรงหลังจากnpm iนั้นไม่ทำงานบน mac ของฉัน

ฉันหวังว่าฉันจะสามารถช่วยวิญญาณที่ผิดหวังบางอย่าง


2
แค่เรียกใช้การสร้างอิเลคตรอนใหม่ก็ทำให้ฉันทำงานได้แล้ว ไม่จำเป็นต้องลบและติดตั้งโมดูลในกรณีของฉัน
stoefln

1
ถ้าอย่างนั้นคุณโชคดี @stoefln โชคไม่ดีที่คุณต้องทำตามขั้นตอนเหล่านี้ทีละตัวในการตั้งค่าบางอย่าง
chitzui

1
ฉันใช้ Windows แต่วิธีนี้ใช้ได้สำหรับฉันเช่นกัน คุณช่วยอธิบายสิ่งที่ทำให้เกิดปัญหานี้ได้อย่างไร นี่อาจเป็นข้อผิดพลาดกับอิเล็กตรอนหรือไม่?
jbinvnt

@jbinvnt ใช่มันเป็นที่รู้จักกันในข้อ จำกัด ของอิเล็กตรอนgithub.com/SimulatedGREG/electron-vue/issues/872
Konstantin Vdovkin

วิธีการสร้างอิเล็กตรอนเพียงอย่างเดียวผ่านไปป์ไลน์หรือคำสั่งใด ๆ
Kirataka

58

คุณต้องสร้างแพคเกจและบอก NPM เพื่ออัปเดตของไบนารีเกินไป ลอง:

npm rebuild bcrypt --update-binary

@robertklep ตอบคำถามญาติกับคำสั่งนี้ดู

การสร้างใหม่เท่านั้นยังไม่สามารถแก้ไขปัญหาของฉันได้ผลในแอปพลิเคชันของฉัน

หวังว่ามันจะช่วย!


1
ฉันคิดว่าวัตถุประสงค์ของการสร้างใหม่คือการอัพเดตไบนารีเมื่อใดที่คุณต้องการสร้างใหม่โดยไม่ต้องอัพเดตไบนารี
bobmoff

1
@ Bobmoff ฉันคิดว่าวิธีเดียวกับที่พยายามใช้เฉพาะการสร้างใหม่เอกสารบอกว่าพวกเขาอัปเดตทุกอย่างสำหรับเรา .. แต่มีข้อผิดพลาดเท่านั้น - ปัญหาของฉันคือการซิงค์พื้นที่เก็บข้อมูลในเครื่องรุ่นเก่าที่ทำงานกับ NodeJS / NPM ดังนั้นฉันจึงมองไปรอบ ๆ และ "- อัปเดตไบนารี" เป็นวิธีที่จะบอกให้บังคับจริง ๆ และเปลี่ยนวิธีการสร้างใหม่ตามธรรมชาติ
RPichioli

30

เพียงแค่เรียกใช้:

npm uninstall bcrypt

ติดตามโดย:

npm install bcrypt(หรือnpm installหากประกาศbcryptเป็นการอ้างอิงในไฟล์package.jsonของคุณ)


13

คุณสามารถดูลิงค์นี้

เพื่อตรวจสอบโหนดของคุณอย่างถูกต้อง การใช้ NODE_MODULE_VERSION 51 หมายความว่ารุ่นโหนดของคุณคือ nodejs v7.x ต้องการ NODE_MODULE_VERSION 57 หมายความว่าคุณต้องอัพเกรดโหนดเป็น v8.x ดังนั้นคุณต้องอัพเกรดโหนดของคุณ จากนั้นคุณต้องเรียกใช้npm rebuildคำสั่งเพื่อสร้างโครงการของคุณใหม่


3
คำตอบนั้นควรมีประโยชน์หากไม่มีลิงค์
Tobias Wilfert

มีปัญหาที่คล้ายกันบ่นจาก 67 เป็น 57 ในกรณีของฉันฉันปรับลดรุ่นจาก11/stableเป็น8/stableกับ$ snap refresh node --channel=8/stableใน Ubuntu $ npm rebuildหลังจากนั้นได้
Daniel

คำตอบนี้ผิด NODE_MODULE_VERSION 51หมายความว่า.nodeไฟล์ถูกคอมไพล์กับโหนดบางโหนดโดยใช้ NODE_MODULE_VERSION 51 และผู้ใช้ใช้โหนดรุ่นที่ 57 ดังนั้นเขาจึงไม่สามารถใช้งานได้โดยตรง ผู้ใช้ควรสร้างการรวบรวมใหม่
alsotang

11

เป็นไปได้ว่าคุณมีปัญหานี้เนื่องจาก package-lock.json ดูเหมือนว่าจะปิดกั้นคุณจากการรวบรวมใหม่หรือสร้างการอ้างอิงของคุณใหม่แม้ว่าคุณจะเรียกใช้อย่างชัดเจนnpm rebuildก็ตาม ฉันวิ่งต่อไปนี้ทั้งหมดเพื่อแก้ไขให้ฉัน:

rm package-lock.json;
rm -rf node_modules;
npm install;

10

ต้องแน่ใจว่าคุณติดตั้ง NodeJS เพียงเวอร์ชันเดียวเท่านั้น ลองสองสิ่งนี้:

node --version
sudo node --version

ฉันเริ่มติดตั้ง NodeJS จากซอร์ส แต่มันเป็นรุ่นที่ไม่ถูกต้องและ 'อัปเกรด' เป็นเวอร์ชันล่าสุดโดยใช้nvmซึ่งไม่ได้ลบเวอร์ชันก่อนหน้าใด ๆ และติดตั้งเฉพาะรุ่นที่ต้องการใน/root/.nvm/versions/...ไดเรกทอรี ดังนั้นsudo nodeก็ยังคงชี้ไปที่รุ่นก่อนหน้าในขณะที่nodeกำลังชี้ไปที่รุ่นที่ใหม่กว่า


Gah! ทำไมฉันไม่คิดอย่างนี้! ขอบคุณสำหรับการโพสต์เพื่อให้ฉันสามารถ facepalm
เขาวงกต

3

ฉันพบข้อผิดพลาดเดียวกัน แต่ฉันพยายามเรียกใช้แอปพลิเคชันโหนดโดยใช้คอนเทนเนอร์ Docker

ฉันแก้ไขโดยการเพิ่มไฟล์. dockerignore เพื่อเพิกเฉยไปที่ไดเร็กทอรี node_modules เพื่อให้แน่ใจว่าเมื่อสร้างภาพ docker มันจะสร้างแพ็คเกจดั้งเดิมสำหรับภาพที่ฉันต้องการ (อัลไพน์) แทนที่จะคัดลอกไปที่ node_modules รวบรวมสำหรับโฮสต์ของฉัน (Debian) .


ทำงานให้ฉัน ... เพิ่ม: node_modules/และpackage-lock.json
Giovanne Afonso

3

พบว่าปัญหาของฉันเกิดจากข้อผิดพลาดของผู้ใช้: ตรวจสอบให้แน่ใจว่ารุ่นของโหนดที่คุณใช้สำหรับการทำงานนั้นเหมือนกันกับที่คุณใช้เมื่อใช้การติดตั้ง npm หรือไหมพรม

ฉันใช้ NVM สำหรับโหนดการกำหนดเวอร์ชันและใช้งานเส้นด้ายผ่านเทอร์มินัล แต่ IDE ของฉันได้รับการตั้งค่าให้ใช้โหนดรุ่นที่เก่ากว่าเมื่อทำงานและมันก็โยนข้อผิดพลาดด้านบน การจับคู่โหนดรุ่น IDE ของฉันในการกำหนดค่าการเรียกใช้ไปยังโหนด - รุ่นแก้ไขปัญหา


1

ฉันมีปัญหาคล้ายกันกับ robotjs มีรหัสบางอย่างที่ไม่ต้องการที่ต้องการโหนด v11 แต่ฉันได้รวบรวมรหัสอิเล็กตรอนบน v12 แล้ว ดังนั้นฉันได้รับข้อผิดพลาดโดยทั่วไป ไม่มีอะไรที่นี่ทำงานได้เพราะฉันพยายามสร้างอิเล็กตรอนและการพึ่งพาอื่น ๆ ของฉันไปยังโหนด v11 จาก v12

นี่คือสิ่งที่ฉันทำ (ส่วนหนึ่งมาจากคำตอบของ chitzui เครดิตที่เครดิตครบกำหนด):

  • สำรองแพ็คเกจ package
  • ลบโฟลเดอร์ node_modules ทั้งหมด
  • ลบ package_lock.json อย่างสมบูรณ์
  • ลบ package.json (จะเริ่มต้นใหม่ในภายหลัง)
  • ปิดโปรแกรมแก้ไขที่เปิดอยู่และหน้าต่าง cmd อื่น ๆ ที่อยู่ในไดเรกทอรีของโครงการ
  • เรียกใช้npm initเพื่อเริ่มแพคเกจใหม่จากนั้นข้อมูลขาดหายไปด้วยแพ็คเกจสำรองข้อมูลเก่า
  • วิ่ง npm i
  • แก้ไขแล้ว :)

หวังว่านี่จะช่วยได้


1

สำหรับโมดูลอิเล็กตรอนให้ติดตั้งอิเล็กตรอนใหม่

Format:
electron-rebuild -o <module_name> -v <electron version>

Example:
electron-rebuild -o myaddon -v 9.0.0-beta.6

ระบุรุ่นเดียวกันกับที่คุณติดตั้งในไดเรกทอรีปัจจุบัน

คุณอาจมีประสบการณ์นี้ที่บิวด์โหนด gyp มาตรฐานจะรายงานเป็น 64 จากนั้นอิเลคตรอนสร้างใหม่แบบพื้นฐานจะรายงาน 76 ไม่ได้จนกว่าคุณจะเพิ่ม -v ด้วยเวอร์ชันที่แน่นอนซึ่งจะชนกับเวอร์ชัน 80 จริง (สำหรับ 9.0.0-beta 6)


1

ฉันลบโฟลเดอร์ node_modules และรันnpm installและแอ็พพลิเคชันของฉันเริ่มต้นโดยไม่มีข้อผิดพลาด


0

ฉันได้รับข้อผิดพลาดนี้เมื่อเรียกใช้แอพด้วย systemd:

ExecStart=/usr/local/bin/node /srv/myapp/server.js

แต่ฉันใช้เวอร์ชั่นอื่นnpm installในเชลล์:

$ which node
/home/keith/.nvm/versions/node/v8.9.0/bin/node

ในกรณีนี้คือการตั้งค่าของคุณคุณสามารถ hardcode รุ่นโหนดในแฟ้มบริการหรือทำตามวิธีแก้ปัญหาเช่นนี้


0

หลังจากลองสิ่งที่แตกต่าง สิ่งนี้ใช้ได้ผล

ลบโฟลเดอร์โหนดโมดูลของคุณและรัน

npm i

0

ฉันประสบปัญหาเดียวกันกับโมดูล grpc และในกรณีของฉันฉันใช้อิเล็กตรอนและตั้งรุ่นอิเล็กตรอนผิดในตัวแปร env "ส่งออก npm_config_target = 1.2.3" ตั้งเป็นรุ่นอิเล็กตรอนที่ฉันใช้แก้ไขปัญหาใน สิ้นสุดของฉัน หวังว่านี่จะช่วยคนที่ตั้งค่าตัวแปร env ตามที่กำหนดไว้ที่นี่ ( https://electronjs.org/docs/tutorial/using-native-node-modeules#the-npm-way )


0

คุณสามารถลบ bcrypt ทั้งหมดและติดตั้ง bcryptjs มันช้ากว่า ~ 30% แต่ไม่มีการพึ่งพาดังนั้นจึงไม่ต้องเจ็บปวด

npm i -S bcryptjs && npm uninstall -S bcrypt

เราได้ติดตั้งสำเร็จแล้วสำหรับแอปพลิเคชันของเรา เรามีปัญหากับ bcrypt ที่ไม่ได้รวบรวมอินสแตนซ์ AWS สำหรับ Node v8.x


0

ความไม่แน่นอนของโหนด JS เวอร์ชันอาจเป็นสาเหตุของปัญหา ตามที่ระบุไว้ในเอกสาร ตรวจสอบให้แน่ใจว่าใช้หนึ่งใน lts ที่ปล่อยออกมา เช่นระบุสิ่งนี้ใน Dockerfile ของคุณ:

# Pull lts from docker registry
FROM node:8.12.0

# ...

0

ตรวจสอบรุ่นโหนดที่คุณใช้ซึ่งอาจไม่ตรงกันระหว่างที่คาดไว้


0

ฉันมีปัญหาเดียวกันและไม่มีวิธีแก้ปัญหาเหล่านี้ทำงานและฉันไม่รู้ว่าทำไมพวกเขาทำงานให้ฉันในอดีตสำหรับปัญหาที่คล้ายกัน

ยังไงก็ตามเพื่อแก้ปัญหาฉันเพิ่งสร้างแพคเกจด้วยตนเองโดยใช้ node-pre-gyp

cd node_modules/bcrypt
node-pre-gyp rebuild

และทุกอย่างทำงานตามที่คาดไว้

หวังว่านี่จะช่วยได้


0

ฉันเพิ่งได้รับข้อผิดพลาดนี้ในการใช้งานkadenceสคริปต์ "kadence" ที่ติดตั้งจะตรวจสอบ nodejs ก่อนและรันเฉพาะ node ถ้าไม่มี nodejs ฉันมีโหนดรุ่นล่าสุดที่เชื่อมโยงกับไดเรกทอรี ~ / bin ของฉัน แต่ nodejs ใช้รุ่นเก่ากว่าที่ฉันลืมที่จะถอนการติดตั้ง แต่ไม่เคยทำให้เกิดปัญหาจนถึงตอนนี้

ดังนั้นผู้ที่มีปัญหานี้อาจตรวจสอบว่าโหนดและ nodejs ใช้งานโหนดรุ่นเดียวกันจริงหรือไม่


0

ในกรณีของฉันฉันอยู่ในสำนักงานพร็อกซีซึ่งข้ามแพคเกจบางอย่าง เมื่อฉันออกจากพร็อกซีสำนักงานของฉันและพยายามที่จะnpm installทำงาน อาจช่วยคนได้

แต่ฉันใช้เวลาหลายชั่วโมงกว่าจะระบุว่าเป็นเหตุผล


0

ในกรณีของผมผมทำงานแทนnodejs nodeเนื่องจากnodejsการติดตั้งโดยผู้จัดการแพ็คเกจ:

# which node
/home/user/.nvm/versions/node/v11.6.0/bin/node

# which nodejs
/usr/bin/nodejs


0

คุณต้องใช้คำสั่งด้านล่างนี้:

$ rm -rf node_modules
$ rm -rf yarn.lock
$ yarn install

และในที่สุดก็

$ ./node_modules/.bin/electron-rebuild

อย่าลืมyarn add electron-rebuildว่าหากไม่มีการอ้างอิงของคุณ


0

ฉันพบข้อผิดพลาดนี้สองครั้งในแอปอิเล็กตรอนและปรากฏว่าปัญหาคือโมดูลบางอย่างจำเป็นต้องใช้จากกระบวนการหลักมากกว่ากระบวนการเรนเดอร์ ข้อผิดพลาดเกิดขึ้นโดยใช้ pdf2json และโหนดผ้าใบ การย้ายรหัสที่ต้องการโมดูลเหล่านั้นจาก index.htm (กระบวนการเรนเดอร์) ไปยัง main.js (กระบวนการหลัก) แก้ไขข้อผิดพลาดและแอปสร้างขึ้นมาใหม่และวิ่งได้อย่างสมบูรณ์แบบ สิ่งนี้จะไม่แก้ไขปัญหาในทุกกรณี แต่เป็นสิ่งแรกที่ต้องตรวจสอบว่าคุณเขียนแอพอิเล็กตรอนและพบข้อผิดพลาดนี้หรือไม่


0

นี่คือสิ่งที่ใช้ได้ผลสำหรับฉัน ฉันกำลังใช้โมดูลโหนดแบบวนกลับกับ Electron Js และประสบปัญหานี้ หลังจากลองทำสิ่งต่าง ๆ ต่อไปนี้ได้ผลสำหรับฉัน

ในไฟล์package.jsonของคุณในสคริปต์เพิ่มบรรทัดต่อไปนี้:

  ... 
"scripts": {
        "start": "electron .",
        "rebuild": "electron-rebuild"
    
      },
...

จากนั้นเรียกใช้คำสั่งต่อไปนี้ npm run rebuild

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.