노드-NODE_MODULE_VERSION 51을 사용하여 다른 Node.js 버전에 대해 컴파일되었습니다.


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> / Downloads / intro-to-graphql / node_modules / bcrypt / lib / binding / bcrypt_lib .node'가 NODE_MODULE_VERSION 64를 사용하는 다른 Node.js 버전에 대해 컴파일되었습니다."
주제별

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.cmdWindows 용)을 실행 하여 모든 것을 다시 빌드하십시오.

그렇지 않으면 내 Mac에서 작동하지 않은 후에 직접 실행하는 것이 매우 중요 합니다 ../node_modules/.bin/electron-rebuildnpm i

나는 좌절 한 영혼들을 도울 수 있기를 바랍니다.


2
전자 재건을 실행하는 것이 나를 위해 일했습니다. 필자의 경우 모듈을 삭제하고 다시 설치할 필요가 없습니다.
stoefln

1
그렇다면 불행히도 @stoefln이 운이 좋았습니다. 일부 설정에서 이러한 정확한 단계를 하나씩 따르는 것이 중요합니다.
chitzui

1
저는 Windows에 있지만이 솔루션은 저에게도 효과적이었습니다. 이 문제의 원인을 설명 할 수 있습니까? Electron의 버그 일 수 있습니까?
jbinvnt 2016 년


파이프 라인 또는 명령을 통해 전자 재생 만 실행하는 방법
Kirataka

57

당신은해야 할 패키지를 다시 하고 너무 바이너리의 업데이트 할 NPM에게 . 시험:

npm rebuild bcrypt --update-binary

@robertklep,이 명령을 사용하여 상대의 질문에 대답 .

재 구축 만해도 문제가 해결되지 않았습니다. 응용 프로그램에서 제대로 작동합니다.

그것이 도움이되기를 바랍니다!


1
나는 재 빌드의 목적이 바이너리를 업데이트하는 것이라고 생각했는데 바이너리를 업데이트하지 않고 언제 다시 빌드하고 싶습니까?
bobmoff

1
@bobmoff 나는 재구성 만 사용하려고하는 것과 같은 방법을 생각하고 있었고, 문서는 그들이 우리를 위해 모든 것을 업데이트한다고 말합니다. 그러나 오류 만-내 문제는 레거시 작업 로컬 저장소를 새로운 로컬 NodeJS / NPM 버전으로 동기화하는 것이 었습니다. 그래서 주위를 둘러 보았고 "--update-binary"는 자연스럽게 재 구축과 관련된 방식을 강제로 바꾸고 변경하는 방법이었습니다.
RPichioli

30

간단히 실행하십시오.

npm uninstall bcrypt

뒤에 :

npm install bcrypt(또는 npm install, bcryptpackage.json 파일 에서 종속성으로 선언 된 경우 )


13

링크를 볼 수 있습니다

노드 버전을 확인하십시오. NODE_MODULE_VERSION 51을 사용한다는 것은 노드 버전이 nodejs v7.x이고, NODE_MODULE_VERSION 57이 필요하다는 것은 노드를 v8.x로 업그레이드해야한다는 것을 의미하므로 노드를 업그레이드해야합니다. 그런 다음 npm rebuild프로젝트를 다시 빌드 하려면 명령을 실행해야합니다.


3
답변 자체는 링크없이 도움이되어야합니다.
Tobias Wilfert

내가 다운 그레이드 내 경우에는 57에 67에서 불평 비슷한 문제가 있었다 11/stable8/stable$ snap refresh node --channel=8/stable우분투를. 그 후 않았다 $ npm rebuild.
Daniel

이 답변은 잘못되었습니다. NODE_MODULE_VERSION 51을 사용하여 파일이 일부 노드 버전에 대해 컴파일 NODE_MODULE_VERSION 51되었음을 의미합니다 .node. 사용자가 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을 가리키고있는 반면 새로운 버전을 가리키고있었습니다.


가! 왜 내가 이것을 생각하지 않았다! 게시 해 주셔서 감사합니다.
미로

3

같은 오류가 발생했지만 Docker 컨테이너를 사용하여 노드 응용 프로그램을 실행하려고했습니다.

docker 이미지가 빌드 될 때 내 호스트 (Debian) 용으로 컴파일 된 node_modules를 복사하는 대신 원하는 이미지 (Alpine)의 기본 패키지를 빌드하도록 node_modules 디렉토리를 무시하기 위해 .dockerignore 파일을 추가하여 수정했습니다. .


나를 위해 node_modules/package-lock.json
일한

3

내 문제는 사용자 오류였습니다. 실행에 사용하는 노드 버전이 npm 설치 또는 원사를 실행할 때 사용하는 버전과 동일한 지 확인하십시오.

버전 관리 노드에 NVM을 사용하고 터미널을 통해 원사를 실행하고 있었지만 IDE가 실행될 때 이전 버전의 노드를 사용하도록 설정되어 위의 오류가 발생했습니다. run config의 IDE 버전의 node를 node --version과 일치 시키면 문제가 해결되었습니다.


1

robotjs와 비슷한 문제가있었습니다. 노드 v11이 필요한 더 이상 사용되지 않는 코드가 있지만 v12에서 이미 전자 코드를 컴파일했습니다. 그래서 기본적으로 같은 오류가 발생했습니다. v12에서 노드 v11로 전자 및 기타 종속성을 기본적으로 재구성하려고 시도했을 때 여기에서 아무것도 작동하지 않았습니다.

여기 내가 한 일이 있습니다 (이 부분은 chitzui의 답변, 신용이 필요한 신용에 근거합니다).

  • package.json을 백업하십시오.
  • 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

현재 디렉토리에 설치 한 것과 동일한 버전을 지정하십시오.

표준 node-gyp 빌드가 64로보고 된 다음이 경험이있을 수 있습니다. 정확한 전자 버전으로 -v를 추가하여 실제 버전 80 (9.0.0- 베타의 경우)에 충돌 할 때까지 기본 전자 재 구축은 76을보고합니다. 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

이 셋업 경우, 당신도 서비스 파일의 노드 버전을 하드 코딩하거나 같은 해결 방법을 따를 수 이 하나 .


0

다른 일을 시도한 후. 이것은 효과가 있었다.

노드 모듈 폴더를 삭제하고 실행하십시오.

npm i

0

나는 grpc 모듈과 같은 문제에 직면하고 있으며, 전자를 사용하고 env 변수 "export npm_config_target = 1.2.3"에서 잘못된 전자 버전을 설정하여 사용중인 전자 버전으로 설정했습니다. 내 끝. 희망은 이것이 여기에 주어진 환경 변수를 설정하는 누군가를 돕기를 희망합니다 ( https://electronjs.org/docs/tutorial/using-native-node-modules#the-npm-way )


0

bcrypt를 완전히 제거하고 bcryptjs를 설치할 수 있습니다. ~ 30 % 느리지 만 종속성이 없으므로 설치에 어려움이 없습니다.

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

우리는 응용 프로그램에 성공적으로 설치했습니다. Node v8.x 용 AWS 인스턴스에서 bcrypt가 컴파일되지 않는 문제가있었습니다.


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"스크립트가 nodejs를 먼저 확인하고 nodejs가없는 경우에만 node를 실행하는 kadence를 실행하는이 오류가 발생 했습니다. ~ / bin 디렉토리에 최신 버전의 노드가 연결되어 있지만 nodejs는 제거하지 않은 이전 버전을 실행하지만 지금까지는 문제가 발생하지 않았습니다.

따라서이 문제가있는 사람들은 node와 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

여기 나를 위해 일한 것이 있습니다. 나는 사용하고있다 루프백 전자 JS와 노드 모듈을이 문제에 직면했다. 많은 것들을 시도한 후에 나를 위해 일했습니다.

스크립트package.json 파일에서 다음 행을 추가하십시오.

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

그런 다음 다음 명령을 실행하십시오. npm run rebuild

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.