对于bcrypt和db-migrate,NodeJS 4&5 npm安装失败

前一段时间,我安装了NodeJS(v0.10.31),并在一个没有问题的项目上工作,但最近我决定更新到Node v5.0.0。 一切都很好,直到我决定使用bcrypt和db-migrate。 调用命令npm install将无法分发出一长串细节,但没有关于该问题的明确信息:

$ sudo npm install > bcrypt@0.8.5 install /home/cavpollo/intuitiva/cirio/cirio-id/node_modules/bcrypt > node-gyp rebuild make: Entering directory `/home/cavpollo/intuitiva/cirio/cirio-id/node_modules/bcrypt/build' CXX(target) Release/obj.target/bcrypt_lib/src/blowfish.o CXX(target) Release/obj.target/bcrypt_lib/src/bcrypt.o CXX(target) Release/obj.target/bcrypt_lib/bcrypt_node/src.o In file included from /home/cavpollo/.node-gyp/5.0.0/include/node/node.h:42:0, from ../node_modules/nan/nan.h:24, from ../src/bcrypt_node.cc:1: /home/cavpollo/.node-gyp/5.0.0/include/node/v8.h:336:1: error: expected unqualified-id before 'using' /home/cavpollo/.node-gyp/5.0.0/include/node/v8.h:469:1: error: expected unqualified-id before 'using' /home/cavpollo/.node-gyp/5.0.0/include/node/v8.h:856:1: error: expected unqualified-id before 'using' In file included from ../node_modules/nan/nan.h:184:0, from ../src/bcrypt_node.cc:1: ../node_modules/nan/nan_maybe_43_inl.h:13:1: error: expected unqualified-id before 'using' ../node_modules/nan/nan_maybe_43_inl.h:16:1: error: expected unqualified-id before 'using' ../node_modules/nan/nan_maybe_43_inl.h:19:12: error: 'Maybe' does not name a type ../node_modules/nan/nan_maybe_43_inl.h:24:12: error: 'Maybe' does not name a type ../node_modules/nan/nan_maybe_43_inl.h:31:1: error: 'MaybeLocal' does not name a type ... [about 100 lines of log errors] ... ../node_modules/nan/nan_new.h:36:1: warning: control reaches end of non-void function [-Wreturn-type] make: *** [Release/obj.target/bcrypt_lib/src/bcrypt_node.o] Error 1 make: Leaving directory `/home/cavpollo/intuitiva/cirio/cirio-id/node_modules/bcrypt/build' gyp ERR! build error gyp ERR! stack Error: `make` failed with exit code: 2 gyp ERR! stack at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:270:23) gyp ERR! stack at emitTwo (events.js:87:13) gyp ERR! stack at ChildProcess.emit (events.js:172:7) gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12) gyp ERR! System Linux 3.2.0-37-generic-pae gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild" gyp ERR! cwd /home/cavpollo/intuitiva/cirio/cirio-id/node_modules/bcrypt gyp ERR! node -v v5.0.0 gyp ERR! node-gyp -v v3.0.3 gyp ERR! not ok npm ERR! Linux 3.2.0-37-generic-pae npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" npm ERR! node v5.0.0 npm ERR! npm v3.3.10 npm ERR! code ELIFECYCLE npm ERR! bcrypt@0.8.5 install: `node-gyp rebuild` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the bcrypt@0.8.5 install script 'node-gyp rebuild'. npm ERR! Make sure you have the latest version of node.js and npm installed. npm ERR! If you do, this is most likely a problem with the bcrypt package, npm ERR! not with npm itself. npm ERR! Tell the author that this fails on your system: npm ERR! node-gyp rebuild npm ERR! You can get their info via: npm ERR! npm owner ls bcrypt npm ERR! There is likely additional logging output above. npm ERR! Please include the following file with any support request: npm ERR! /home/cavpollo/intuitiva/cirio/cirio-id/npm-debug.log 

它似乎没有任何关于错误的信息,使用NodeJS V4.XX也没有帮助。

我的设置:

  • Ubuntu 12.04
  • 节点v5.0.0
  • npm v3.3.10

经过很多谷歌搜索,有人指出,对于NodeJS V4(和更新的版本)需要更新版本的GCC(4.8我认为)。

我现在的版本是4.6.3,你可以看到:

 $ gcc --version gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3 

所以只需更新它,并能够在这些链接的帮助下完成:

如何安装Gcc 4.8

如何在Ubuntu 14.04上使用最新的GCC 4.9

我最终使用的一系列命令是:

 $ sudo apt-get install python-software-properties $ sudo add-apt-repository ppa:ubuntu-toolchain-r/test $ sudo apt-get update $ sudo apt-get install gcc-4.8 g++-4.8 $ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8 

再次检查GCC版本

 $ gcc --version gcc (Ubuntu 4.8.1-2ubuntu1~12.04) 4.8.1 

之后,我可以打电话给'npm install',事情完美无缺。

这一行更新为我工作。 从这个链接找到答案https://github.com/ncb000gt/node.bcrypt.js/issues/351

 sudo apt-get install build-essential Then install bcrypt: npm install bcrypt 

工作感谢。

将NodeJS从v0.12.6更新到5.0.0 http://simon.fearby.com/blog/?p=2246