Node - dikompilasi dengan versi Node.js yang berbeda menggunakan NODE_MODULE_VERSION 51


142

Saya menjalankan aplikasi simpul di terminal. Baru-baru ini ditingkatkan ke simpul v8.5.0, tetapi saya mendapatkan kesalahan ini:

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)

Ada ide untuk mengatasi ini?


Harap tandai jawaban yang benar
Shanika Ediriweera

Jawaban:


119

Anda perlu menghapus folder modul ( bcrypt) dari node_modulesfolder dan menginstalnya kembali, gunakan perintah berikut:

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

7
Tidak bekerja Bagi saya, masalahnya adalah pada zmqpaket, dan membangun kembali atau menghapusnya dan npm installingsekali lagi tidak membantu. Selalu masalah yang sama.
trusktr

7
@trusktr Cobalah untuk menghapus node_modules folder sepenuhnya: rm -rf node_modules. Hapus npm cache:, npm cache clearhapus package-lock.json atau npm-shrinkwrap.json. Dan hanya setelah lari itu npm i.
alexmac

1
Mendapat pesan yang bagus, "Saya harap Anda tahu apa yang Anda lakukan." ketika saya melakukan cache itu jelas. Aku tidak terlalu banyak, tetapi ternyata kamu melakukannya! Itu berhasil.
ouflak

Anda tidak / tidak perlu npm cache clear, perintah lain membuatnya
caub

Bekerja untukku! Kesalahan saya sebenarnya adalah - "Modul '/ Users / <username> / Downloads / intro-to-graphql / node_modules / bcrypt / lib / binding / bcrypt_lib .node' dikompilasi dengan versi Node.js berbeda menggunakan NODE_MODULE_VERSION 64."
theusual

73

Saya memiliki masalah yang sama dan tidak ada yang disebutkan di sini bekerja untuk saya. Inilah yang bekerja untuk saya:

  1. Memerlukan semua dependensi yang Anda butuhkan dalam main.jsfile yang dijalankan oleh elektron. (Ini sepertinya menjadi bagian penting pertama bagi saya)
  2. Jalankan npm i -D electron-rebuilduntuk menambahkan paket membangun kembali elektron
  3. Hapus node-modulesfolder, dan juga packages-lock.jsonfile.
  4. Jalankan npm iuntuk menginstal semua modul.
  5. Jalankan ./node_modules/.bin/electron-rebuild( .\node_modules\.bin\electron-rebuild.cmduntuk Windows) untuk membangun kembali semuanya

Sangat penting untuk menjalankan ./node_modules/.bin/electron-rebuildlangsung setelah npm iitu tidak berfungsi pada mac saya.

Saya harap saya bisa membantu beberapa jiwa yang frustrasi.


2
Hanya menjalankan electron-rebuild melakukan pekerjaan untuk saya. Tidak perlu menghapus dan menginstal ulang modul dalam kasus saya.
stoefln

1
Kalau begitu Anda beruntung @stoefln sayangnya sangat penting untuk mengikuti langkah-langkah tepat ini satu per satu di beberapa pengaturan.
chitzui

1
Saya menggunakan Windows tetapi solusi ini juga berfungsi untuk saya. Bisakah Anda menjelaskan apa yang menyebabkan masalah ini? Mungkinkah ini bug dengan Elektron?
jbinvnt

@ jbinvnt ya, itu diketahui pembatasan elektron Elecub.com/SimulatedGREG/electron-vue/issues/872
Konstantin Vdovkin

Bagaimana menjalankan hanya membangun kembali elektron melalui pipa atau perintah apa pun
Kirataka

57

Anda harus membangun kembali paket dan memberi tahu npm untuk memperbarui binernya juga . Mencoba:

npm rebuild bcrypt --update-binary

@robertklep menjawab pertanyaan relatif dengan perintah ini, lihat .

Hanya rekondisi yang belum menyelesaikan masalah saya, ini berfungsi dengan baik di aplikasi saya.

Semoga ini bisa membantu!


1
Saya berpikir bahwa tujuan membangun kembali adalah untuk memperbarui biner, kapan Anda ingin membangun kembali TANPA memperbarui biner?
bobmoff

1
@ bobmoff Saya berpikir dengan cara yang sama mencoba menggunakan hanya membangun kembali, dokumen mengatakan mereka memperbarui segalanya untuk kita .. tetapi hanya kesalahan - Masalah saya adalah untuk menyinkronkan warisan saya bekerja repositori lokal ke versi NodeJS / NPM lokal baru. Jadi saya melihat sekeliling dan "--update-binary" adalah cara untuk mengatakannya untuk benar-benar memaksa dan mengubahnya seperti yang harus dilakukan dengan membangun kembali secara alami.
RPichioli

30

Cukup jalankan:

npm uninstall bcrypt

Diikuti oleh:

npm install bcrypt(atau npm install, jika bcrypt dinyatakan sebagai dependensi dalam file package.json Anda )


13

Anda dapat melihat tautan ini

untuk memeriksa simpul simpul Anda dengan benar. menggunakan NODE_MODULE_VERSION 51 berarti bahwa versi node Anda adalah nodejs v7.x, membutuhkan NODE_MODULE_VERSION 57 berarti Anda perlu memutakhirkan node Anda ke v8.x, sehingga Anda perlu memutakhirkan node Anda. dan kemudian Anda perlu menjalankan npm rebuildperintah untuk membangun kembali proyek Anda


3
Jawabannya sendiri seharusnya membantu tanpa tautan.
Tobias Wilfert

Punya masalah serupa mengeluh dari 67 ke 57. Dalam kasus saya, saya downgrade dari 11/stableke 8/stabledengan $ snap refresh node --channel=8/stabledi Ubuntu. Setelah itu $ npm rebuild.
Daniel

Jawaban ini salah. NODE_MODULE_VERSION 51berarti .nodefile dikompilasi terhadap beberapa versi node menggunakan NODE_MODULE_VERSION 51. Dan pengguna menggunakan versi node menggunakan 57, jadi ia tidak dapat menggunakannya secara langsung. Pengguna harus membangun kembali kompilasi.
alsotang

11

Kemungkinan besar Anda memiliki masalah ini karena package-lock.json. Entah bagaimana itu tampaknya menghalangi Anda mengkompilasi ulang atau membangun kembali dependensi Anda, bahkan jika Anda menjalankannya secara eksplisit npm rebuild. Saya menjalankan semua yang berikut untuk memperbaikinya untuk saya:

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

10

Pastikan Anda hanya menginstal satu versi NodeJS. Coba dua ini:

node --version
sudo node --version

Saya awalnya menginstal NodeJS dari sumber, tetapi itu adalah versi yang salah dan 'ditingkatkan' ke versi terbaru menggunakan nvm, yang tidak menghapus versi sebelumnya, dan hanya menginstal versi yang diinginkan di /root/.nvm/versions/...direktori. Jadi sudo nodemasih menunjuk ke versi sebelumnya, sementara nodemenunjuk ke versi yang lebih baru.


gah! Kenapa aku tidak memikirkan ini! Terima kasih telah memposting sehingga saya dapat facepalm.
labirin

3

Saya mendapat kesalahan yang sama tetapi saya mencoba menjalankan aplikasi simpul menggunakan wadah Docker.

Saya memperbaikinya dengan menambahkan file .dockerignore untuk mengabaikan direktori node_modules untuk memastikan bahwa ketika gambar buruh pelabuhan membangun, itu membangun paket asli untuk gambar yang saya inginkan (Alpine) alih-alih menyalin node_modules yang dikompilasi untuk host saya (Debian) .


Bekerja untuk saya ... menambahkan: node_modules/danpackage-lock.json
Giovanne Afonso

3

Ternyata masalah saya adalah kesalahan pengguna: pastikan versi node yang Anda gunakan untuk menjalankan adalah sama dengan yang Anda gunakan saat menjalankan npm install atau yarn.

Saya menggunakan NVM untuk versi node dan menjalankan benang melalui terminal, tetapi IDE saya diatur untuk menggunakan versi yang lebih lama dari node ketika menjalankan dan itu melempar kesalahan di atas. Mencocokkan versi node IDE saya dalam menjalankan config ke node --versi memperbaiki masalah.


1

Saya punya masalah serupa dengan robotjs. Ada beberapa kode usang yang membutuhkan simpul v11, tapi saya sudah mengkompilasi kode elektron pada v12. Jadi pada dasarnya saya mendapatkan kesalahan yang sama. Tidak ada yang bekerja di sini karena saya pada dasarnya mencoba untuk membangun kembali elektron dan dependensi saya yang lain ke dalam simpul v11 dari v12.

Inilah yang saya lakukan (bagian dari ini didasarkan pada jawaban chitzui, kredit di mana kredit jatuh tempo):

  • Cadangkan package.json
  • sepenuhnya menghapus folder node_modules
  • hapus sepenuhnya package_lock.json
  • hapus package.json (akan diinstal ulang nanti)
  • Tutup semua editor terbuka dan jendela cmd lainnya yang ada di direktori proyek.
  • jalankan npm inituntuk menginstal kembali paket, kemudian data yang hilang dengan package.json yang dicadangkan lama
  • Lari npm i
  • diperbaiki :)

Semoga ini membantu.


1

Untuk modul Electron, instal pembangunan kembali elektron.

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

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

Tentukan versi yang sama yang telah Anda instal di direktori saat ini

Anda mungkin memiliki pengalaman ini di mana membangun simpul-gyp standar akan melaporkan sebagai 64, maka elektron-membangun kembali dasar akan melaporkan 76, tidak sampai Anda menambahkan -v dengan versi tepat itu menabrak versi aktual 80 (untuk 9.0.0-beta. 6)


1

Saya menghapus folder node_modules dan menjalankan npm installdan aplikasi saya mulai tanpa kesalahan.


0

Saya mendapatkan kesalahan ini ketika menjalankan aplikasi saya dengan systemd:

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

Tapi saya menggunakan versi yang berbeda untuk npm installdi shell:

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

Jika ini adalah pengaturan Anda, Anda bisa membuat hardcode versi node dalam file layanan atau mengikuti solusi seperti ini .


0

Setelah mencoba berbagai hal. Ini berhasil.

Hapus folder modul simpul Anda dan jalankan

npm i

0

Saya menghadapi masalah yang sama dengan modul grpc dan dalam kasus saya, saya menggunakan elektron dan telah menetapkan versi elektron yang salah dalam variabel env "export npm_config_target = 1.2.3", mengaturnya ke versi elektron yang saya gunakan untuk menyelesaikan masalah pada akhir saya. Semoga ini bisa membantu seseorang yang menetapkan variabel env seperti yang diberikan di sini ( https://electronjs.org/docs/tutorial/using-native-node-modules#the-npm-way )


0

Anda dapat menghapus bcrypt sepenuhnya dan menginstal bcryptjs. ~ 30% lebih lambat, tetapi tidak memiliki dependensi, jadi tidak ada rasa sakit menginstalnya.

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

Kami telah menginstalnya dengan sukses untuk aplikasi kami. Kami memiliki masalah dengan bcrypt yang tidak dikompilasi pada instance AWS untuk Node v8.x


0

Secara potensial, ketidakkonsistenan dari simpul JS versi adalah yang menyebabkan masalah. Sebagaimana dinyatakan dalam dokumentasi . Pastikan untuk menggunakan salah satu rilisnya. Misalnya tentukan ini di Dockerfile Anda:

# Pull lts from docker registry
FROM node:8.12.0

# ...

0

Periksa versi Node yang Anda gunakan, mungkin ketidakcocokan antara apa yang diharapkan.


0

Saya memiliki masalah yang sama dan tidak ada solusi yang bekerja dan saya tidak tahu mengapa, mereka bekerja untuk saya di masa lalu untuk masalah yang sama.

Pokoknya untuk menyelesaikan masalah saya baru saja secara manual membangun kembali paket menggunakan node-pre-gyp

cd node_modules/bcrypt
node-pre-gyp rebuild

Dan semuanya berjalan seperti yang diharapkan.

Semoga ini membantu


0

Saya baru saja mendapatkan kesalahan ini menjalankan kadence script "kadence" diinstal memeriksa nodejs pertama dan hanya menjalankan node jika tidak ada nodejs. Saya memiliki versi terbaru dari simpul yang terhubung ke direktori ~ / bin saya tetapi nodejs menjalankan versi yang lebih lama yang saya lupa untuk hapus instalasinya tetapi tidak pernah menyebabkan masalah sampai sekarang.

Jadi orang dengan masalah ini mungkin memeriksa apakah simpul dan simpul benar-benar menjalankan versi simpul yang sama ...


0

Dalam kasus saya, saya berada di proksi kantor saya yang melewatkan beberapa paket. Ketika saya keluar dari proxy kantor saya dan mencoba melakukannya npm installberhasil. Mungkin ini membantu seseorang.

Tetapi saya butuh beberapa jam untuk mengidentifikasi bahwa itulah alasannya.


0

Dalam kasus saya, saya nodejsmalah berlari node. Karena nodejsdiinstal oleh manajer paket:

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

# which nodejs
/usr/bin/nodejs

0

jalankan npm config set python python2.7dan jalankan npm installlagi pestanya dihidupkan.


0

Anda hanya perlu menjalankan perintah di bawah ini:

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

dan akhirnya

$ ./node_modules/.bin/electron-rebuild

jangan lupa yarn add electron-rebuildjika itu tidak ada dalam dependensi Anda.


0

Saya telah mengenai kesalahan ini dua kali dalam aplikasi elektron dan ternyata masalahnya adalah bahwa beberapa modul perlu digunakan dari proses utama daripada proses render. Kesalahan terjadi menggunakan pdf2json dan juga node-canvas. Memindahkan kode yang memerlukan modul-modul itu dari index.htm (proses render) ke main.js (proses utama) memperbaiki kesalahan dan aplikasi dibangun kembali dan berjalan dengan sempurna. Ini tidak akan memperbaiki masalah dalam semua kasus tetapi ini adalah hal pertama yang memeriksa apakah Anda menulis aplikasi elektron dan mengalami kesalahan ini.


0

Inilah yang bekerja untuk saya. Saya menggunakan modul simpul looped-back dengan Electron Js dan menghadapi masalah ini. Setelah mencoba banyak hal berikut ini berhasil bagi saya.

Dalam file package.json Anda dalam skrip tambahkan baris berikut:

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

Dan kemudian jalankan perintah berikut npm run rebuild

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.