2017-09-23 84 views
11

我正在終端上運行節點應用程序。最近升級到節點v8.5.0,但得到這個錯誤:節點 - 使用NODE_MODULE_VERSION針對不同的Node.js版本編譯51

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) 

任何想法如何解決這個問題?

回答

17

您需要從node_modules文件夾中刪除的模塊文件夾(bcrypt),並重新安裝,請使用以下命令:

$ rm -rf node_modules/bcrypt 
$ npm install 
// or 
$ yarn 
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 

如果這是您的設置,您可以對服務文件中的節點版本進行硬編碼,也可以採用類似this one的解決方法。

2

Symply運行:

npm uninstall bcrypt

通過如下:

npm install bcrypt(或npm install,如果bcrypt被聲明爲依賴於你的的package.json文件)

1

你必須重建包告訴npm更新它的二進制文件。嘗試:

npm rebuild bcrypt --update-binary 

@robertklep用此命令回答了一個相對問題look

只有重建沒有解決我的問題,這在我的應用程序中正常工作。

希望它有幫助!

1

我得到了同樣的錯誤,但我試圖運行一個使用Docker容器的節點應用程序。

我通過添加一個.dockerignore文件來忽略node_modules目錄,以確保docker鏡像生成時,它爲我想要的圖像(Alpine)生成本地包,而不是複製爲我編譯的node_modules主機(Debian)。

相關問題