Nút - được biên dịch theo phiên bản Node.js khác bằng NODE_MODULE_VERSION 51


142

Tôi đang chạy một ứng dụng nút trên thiết bị đầu cuối. Gần đây đã nâng cấp lên nút v8.5.0, nhưng đang gặp lỗi này:

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)

Bất kỳ ý tưởng làm thế nào để giải quyết điều này?


Vui lòng đánh dấu câu trả lời đúng
Shanika Ediriweera

Câu trả lời:


119

Bạn cần xóa thư mục mô-đun ( bcrypt) khỏi node_modulesthư mục và cài đặt lại, sử dụng các lệnh sau:

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

7
Không hoạt động. Đối với tôi, vấn đề là ở zmqgói, và xây dựng lại hoặc xóa nó đi và npm installinglại không giúp được gì. Luôn luôn là cùng một vấn đề.
trusktr

7
@trusktr Hãy thử xóa hoàn toàn thư mục node_modules : rm -rf node_modules. Xóa bộ đệm npm : npm cache clear, xóa gói-lock.json hoặc npm-shrwrap.json. Và chỉ sau khi chạy npm i.
alexmac

1
Có một tin nhắn tốt đẹp, "Tôi chắc chắn hy vọng bạn biết những gì bạn đang làm." Khi tôi đã xóa bộ nhớ cache đó. Tôi không quá nhiều, nhưng rõ ràng bạn làm! Nó đã làm việc.
ngerak

bạn không / không bao giờ cần npm cache clear, các lệnh khác đã thực hiện
caub

Đã làm cho tôi! Lỗi chính xác của tôi là - "Mô-đun '/ Người dùng / <tên người dùng> / Tải xuống / intro-to-graphql / node_modules / bcrypt / lib / bind / bcrypt_lib .node' đã được biên dịch dựa trên phiên bản Node.js khác bằng NODE_MODULE_VERSION 64."
bất thường

73

Tôi đã có cùng một vấn đề và không có gì được đề cập ở đây làm việc cho tôi. Đây là những gì làm việc cho tôi:

  1. Yêu cầu tất cả các phụ thuộc bạn cần trong main.jstệp được chạy bằng điện tử. (đây dường như là phần quan trọng đầu tiên đối với tôi)
  2. Chạy npm i -D electron-rebuildđể thêm gói xây dựng lại điện tử
  3. Xóa node-modulesthư mục, cũng như các packages-lock.jsontập tin.
  4. Chạy npm iđể cài đặt tất cả các mô-đun.
  5. Chạy ./node_modules/.bin/electron-rebuild( .\node_modules\.bin\electron-rebuild.cmdcho Windows) để xây dựng lại mọi thứ

Điều rất quan trọng là chạy ./node_modules/.bin/electron-rebuildtrực tiếp sau khi npm inó không hoạt động trên máy Mac của tôi.

Tôi hy vọng tôi có thể giúp một số linh hồn thất vọng.


2
Chỉ cần chạy điện tử xây dựng lại đã làm công việc cho tôi. Không cần phải xóa và cài đặt lại các mô-đun trong trường hợp của tôi.
stoefln

1
Vậy thì bạn đã gặp may mắn @stoefln, thật không may là phải làm theo từng bước chính xác trong từng bước thiết lập.
chitzui

1
Tôi đang dùng Windows nhưng giải pháp này cũng hiệu quả với tôi. Bạn có thể giải thích những gì gây ra vấn đề này? Đây có thể là một lỗi với Electron?
jbinvnt

@jbinvnt vâng, được biết là giới hạn điện tử github.com/SimulationGREG/electron-vue/issues/872
Konstantin Vdovkin

Cách chạy chỉ xây dựng lại electron thông qua đường ống hoặc bất kỳ lệnh nào
Kirataka

57

Bạn phải xây dựng lại gói và yêu cầu npm cập nhật nhị phân . Thử:

npm rebuild bcrypt --update-binary

@robertklep đã trả lời một câu hỏi tương đối với lệnh này, nhìn kìa .

Chỉ xây dựng lại không giải quyết được vấn đề của tôi, điều này hoạt động tốt trong ứng dụng của tôi.

Hy vọng nó giúp!


1
Tôi nghĩ rằng mục đích của việc xây dựng lại là để cập nhật nhị phân, khi nào bạn muốn xây dựng lại mà KHÔNG cập nhật nhị phân?
bobmoff

1
@bobmoff Tôi đã suy nghĩ giống như cách cố gắng chỉ sử dụng để xây dựng lại, các tài liệu nói rằng họ cập nhật mọi thứ cho chúng tôi .. nhưng chỉ có lỗi - Vấn đề của tôi là đồng bộ hóa kho lưu trữ cục bộ của tôi với phiên bản NodeJS / NPM cục bộ mới. Vì vậy, tôi nhìn xung quanh và "--update-binary" là cách để bảo nó thực sự bắt buộc và thay đổi nó theo cách nó phải làm với việc xây dựng lại một cách tự nhiên.
RPichioli

30

Đơn giản chỉ cần chạy:

npm uninstall bcrypt

Theo dõi bởi:

npm install bcrypt(hoặc npm install, nếu bcrypt được khai báo là phụ thuộc trong tệp pack.json của bạn )


13

bạn có thể thấy liên kết này

để kiểm tra nút của bạn đúng. sử dụng NODE_MODULE_VERSION 51 có nghĩa là phiên bản nút của bạn là nodejs v7.x, yêu cầu NODE_MODULE_VERSION 57 có nghĩa là bạn cần nâng cấp nút của mình lên v8.x, vì vậy bạn cần nâng cấp nút của mình. và sau đó bạn cần chạy npm rebuildlệnh để xây dựng lại dự án của bạn


3
Câu trả lời chính nó sẽ hữu ích mà không cần liên kết.
Tobias Wilfert

Có một vấn đề tương tự phàn nàn từ 67 xuống 57. Trong trường hợp của tôi, tôi hạ cấp từ 11/stablexuống 8/stablevới $ snap refresh node --channel=8/stabletrong Ubuntu. Sau đó đã làm $ npm rebuild.
Daniel

Câu trả lời này là sai. NODE_MODULE_VERSION 51có nghĩa là .nodetệp được biên dịch theo một số phiên bản nút bằng NODE_MODULE_VERSION 51. Và người dùng đang sử dụng phiên bản nút sử dụng 57, vì vậy anh ta không thể sử dụng trực tiếp. Người dùng nên xây dựng lại quá trình biên dịch.
alsotang

11

Nhiều khả năng bạn có vấn đề này do gói-lock.json. Bằng cách nào đó nó dường như chặn bạn biên dịch lại hoặc xây dựng lại các phụ thuộc của bạn, ngay cả khi bạn chạy rõ ràng npm rebuild. Tôi đã chạy tất cả các cách sau để sửa nó cho tôi:

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

10

Hãy chắc chắn rằng bạn chỉ có một phiên bản NodeJS được cài đặt. Hãy thử hai:

node --version
sudo node --version

Ban đầu tôi đã cài đặt NodeJS từ nguồn, nhưng đó là phiên bản không chính xác và 'nâng cấp' lên phiên bản mới nhất bằng cách sử dụng nvm, không xóa bất kỳ phiên bản nào trước đó và chỉ cài đặt phiên bản mong muốn trong /root/.nvm/versions/...thư mục. Vì vậy, sudo nodevẫn đang chỉ vào phiên bản trước, trong khi nodeđang chỉ vào phiên bản mới hơn.


hả Tại sao tôi không nghĩ về điều này! Cảm ơn đã gửi bài để tôi có thể facepalm.
mê cung

3

Tôi đã gặp lỗi tương tự nhưng tôi đã cố chạy một ứng dụng nút bằng cách sử dụng bộ chứa Docker.

Tôi đã sửa nó bằng cách thêm tệp .dockerignore để bỏ qua thư mục node_modules để đảm bảo rằng khi hình ảnh docker xây dựng, nó sẽ xây dựng các gói gốc cho hình ảnh tôi muốn (Alpine) thay vì sao chép qua node_modules được biên dịch cho máy chủ của tôi (Debian) .


Làm việc cho tôi ... đã thêm: node_modules/package-lock.json
Jacanne Afonso

3

Hóa ra vấn đề của tôi là do lỗi người dùng: đảm bảo phiên bản nút bạn đang sử dụng để chạy giống như bạn đang sử dụng khi chạy cài đặt npm hoặc sợi.

Tôi sử dụng NVM cho nút phiên bản và đang chạy sợi thông qua một thiết bị đầu cuối, nhưng IDE của tôi đã được thiết lập để sử dụng phiên bản cũ hơn của nút khi chạy và nó đã gây ra lỗi ở trên. Khớp phiên bản nút IDE của tôi trong cấu hình chạy với nút --version đã khắc phục sự cố.


1

Tôi đã có một vấn đề tương tự với robotjs. Có một số mã không dùng nữa yêu cầu nút v11, nhưng tôi đã biên dịch mã điện tử trên v12. Vì vậy, về cơ bản tôi đã nhận được cùng một lỗi. Không có gì ở đây hoạt động khi tôi về cơ bản đang cố gắng xây dựng lại electron và các phụ thuộc khác của tôi vào nút v11 từ v12.

Đây là những gì tôi đã làm (một phần của điều này dựa trên câu trả lời của chitzui, tín dụng khi tín dụng đáo hạn):

  • Sao lưu gói.json
  • xóa hoàn toàn thư mục node_modules
  • xóa hoàn toàn gói_lock.json
  • xóa gói.json (sẽ thông báo lại sau)
  • Đóng mọi trình soạn thảo đang mở và các cửa sổ cmd khác có trong thư mục của dự án.
  • chạy npm initđến gói reinit, sau đó thiếu dữ liệu với gói.j.j được sao lưu cũ
  • chạy npm i
  • đã sửa :)

Hi vọng điêu nay co ich.


1

Đối với các mô-đun Electron, cài đặt xây dựng lại điện tử.

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

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

Chỉ định phiên bản tương tự mà bạn đã cài đặt trong thư mục hiện tại

Bạn có thể có trải nghiệm này trong đó bản dựng nút-gyp tiêu chuẩn sẽ báo cáo là 64, sau đó bản dựng lại electron cơ bản sẽ báo cáo 76, cho đến khi bạn thêm -v với phiên bản chính xác, nó sẽ chuyển sang phiên bản thực tế 80 (cho 9.0.0-beta. 6)


1

Tôi đã xóa thư mục node_modules và chạy npm installvà ứng dụng của tôi bắt đầu mà không có bất kỳ lỗi nào.


0

Tôi gặp lỗi này khi chạy ứng dụng của mình với systemd:

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

Nhưng tôi đã sử dụng một phiên bản khác cho npm install shell:

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

Nếu đây là thiết lập của bạn, bạn có thể mã hóa phiên bản nút trong tệp dịch vụ hoặc theo cách giải quyết như thế này .


0

Sau khi thử những thứ khác nhau. Điều này đã làm việc.

Xóa thư mục mô-đun nút của bạn và chạy

npm i

0

Tôi đã gặp vấn đề tương tự với mô-đun grpc và trong trường hợp của tôi, tôi đang sử dụng electron và đã đặt phiên bản electron sai trong biến env "export npm_config_target = 1.2.3", đặt nó thành phiên bản điện tử mà tôi đang sử dụng đã giải quyết vấn đề trên kết thúc của tôi Hy vọng điều này sẽ giúp ai đó đặt các biến env như được đưa ra ở đây ( https://electronjs.org/docs/tutorial/USE-native-node-modules#the-npm-way )


0

Bạn có thể loại bỏ hoàn toàn bcrypt và cài đặt bcryptjs. Nó chậm hơn ~ 30%, nhưng không có sự phụ thuộc, vì vậy không có gì khó khăn khi cài đặt nó.

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

Chúng tôi đã cài đặt thành công cho các ứng dụng của chúng tôi. Chúng tôi đã gặp sự cố với bcrypt không biên dịch trên các phiên bản AWS cho Node v8.x


0

Có khả năng, sự không nhất quán của các phiên bản JS nút là nguyên nhân gây ra vấn đề. Như đã nêu trong tài liệu . Hãy chắc chắn để sử dụng một trong những phát hành lts. Ví dụ: chỉ định điều này trong Dockerfile của bạn:

# Pull lts from docker registry
FROM node:8.12.0

# ...

0

Kiểm tra phiên bản Node bạn đang sử dụng, có thể không khớp giữa những gì nó được mong đợi.


0

Tôi có cùng một vấn đề và không có giải pháp nào trong số này hoạt động và tôi không biết tại sao, trước đây họ làm việc cho tôi vì những vấn đề tương tự.

Dù sao để giải quyết vấn đề tôi chỉ cần xây dựng lại gói bằng cách sử dụng nút-pre-gyp

cd node_modules/bcrypt
node-pre-gyp rebuild

Và mọi thứ đã làm việc như mong đợi.

Hi vọng điêu nay co ich


0

Tôi vừa gặp lỗi này khi chạy kadence , tập lệnh "kadence" đã cài đặt sẽ kiểm tra nodejs trước và chỉ chạy nút nếu không có nodejs. Tôi có phiên bản nút mới nhất được liên kết vào thư mục ~ / bin của mình nhưng nodejs chạy phiên bản cũ hơn mà tôi đã quên gỡ cài đặt nhưng chưa bao giờ gây ra sự cố cho đến bây giờ.

Vì vậy, những người có vấn đề này có thể kiểm tra xem nút và nodejs có thực sự chạy cùng một phiên bản của nút không ...


0

Trong trường hợp của tôi, tôi đã ở trong proxy văn phòng của mình, nó đã bỏ qua một số gói. Khi tôi ra khỏi proxy văn phòng của tôi và cố gắng làm npm installnó hoạt động. Có lẽ điều này giúp cho một ai đó.

Nhưng tôi phải mất vài giờ để xác định đó là lý do.


0

Trong trường hợp của tôi, tôi đã chạy nodejsthay vì node. Do nodejsđược cài đặt bởi trình quản lý gói:

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

# which nodejs
/usr/bin/nodejs


0

bạn chỉ cần chạy lệnh dưới đây:

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

và cuối cùng

$ ./node_modules/.bin/electron-rebuild

đừng quên yarn add electron-rebuildnếu nó không tồn tại trong sự phụ thuộc của bạn.


0

Tôi đã gặp lỗi này hai lần trong một ứng dụng điện tử và hóa ra vấn đề là một số mô-đun cần được sử dụng từ quy trình chính thay vì quy trình kết xuất. Lỗi xảy ra khi sử dụng pdf2json và cả nút-canvas. Việc di chuyển mã yêu cầu các mô-đun đó từ index.htm (quá trình kết xuất) sang main.js (quy trình chính) đã sửa lỗi và ứng dụng được xây dựng lại và chạy hoàn hảo. Điều này sẽ không khắc phục vấn đề trong mọi trường hợp nhưng đây là điều đầu tiên để kiểm tra xem bạn có đang viết một ứng dụng điện tử và gặp phải lỗi này hay không.


0

Đây là những gì làm việc cho tôi. Tôi đang sử dụng mô-đun nút loop-back với Electron Js và gặp phải vấn đề này. Sau khi thử nhiều thứ sau đây làm việc cho tôi.

Trong tệp pack.json của bạn trong tập lệnh thêm các dòng sau:

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

Và sau đó chạy theo lệnh npm run rebuild

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.