无法用npm重build依赖关系

正如我试图推动我的nodejs应用程序在本地工作正常heroku,这是我得到的terminal:

dcaclab@ubuntu:~/RubymineProjects/nodejs_consumer$ git push heroku master Counting objects: 1417, done. Compressing objects: 100% (1195/1195), done. Writing objects: 100% (1417/1417), 2.02 MiB | 22 KiB/s, done. Total 1417 (delta 247), reused 0 (delta 0) -----> Node.js app detected -----> Resolving engine versions Using Node.js version: 0.10.6 Using npm version: 1.2.21 -----> Fetching Node.js binaries -----> Vendoring node into slug -----> Installing dependencies with npm npm WARN package.json node-example@0.0.1 No repository field. npm WARN package.json node-example@0.0.1 No readme data. npm WARN package.json node@0.0.0 No repository field. npm WARN package.json faye-websocket@0.4.0 No repository field. npm WARN package.json faye-websocket@0.4.0 'repositories' (plural) Not supported. npm WARN package.json Please pick one as the 'repository' field npm WARN package.json rbytes@0.0.2 No repository field. npm WARN package.json node-example@0.0.1 No repository field. npm WARN package.json node-example@0.0.1 No readme data. npm WARN package.json node@0.0.0 No repository field. npm WARN package.json faye-websocket@0.4.0 No repository field. npm WARN package.json faye-websocket@0.4.0 'repositories' (plural) Not supported. npm WARN package.json Please pick one as the 'repository' field npm WARN package.json rbytes@0.0.2 No repository field. > weak@0.2.2 install /tmp/build_f86ikz343m5u/node_modules/dnode/node_modules/weak > node-gyp rebuild gyp http GET http://nodejs.org/dist/v0.10.6/node-v0.10.6.tar.gz gyp http 200 http://nodejs.org/dist/v0.10.6/node-v0.10.6.tar.gz make: Entering directory `/tmp/build_f86ikz343m5u/node_modules/dnode/node_modules/weak/build' CXX(target) Release/obj.target/weakref/src/weakref.o SOLINK_MODULE(target) Release/obj.target/weakref.node SOLINK_MODULE(target) Release/obj.target/weakref.node: Finished COPY Release/weakref.node make: Leaving directory `/tmp/build_f86ikz343m5u/node_modules/dnode/node_modules/weak/build' > rbytes@0.0.2 install /tmp/build_f86ikz343m5u/node_modules/shoe/node_modules/sockjs/node_modules/rbytes > node-waf configure build sh: node-waf: not found npm ERR! weird error 127 npm ERR! not ok code 0 ! Failed to rebuild dependencies with npm ! Heroku push rejected, failed to compile Node.js app To git@heroku.com:dcaclab-simulator.git ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'git@heroku.com:dcaclab-simulator.git' 

这里是我的package.json文件:

 { "name": "node-example", "version": "0.0.1", "dependencies": { "dnode": "1.0.5", "shoe": "0.0.10" }, "engines": { "node": "0.10.x", "npm": "1.2.x" } } 

有什么想法吗?

编辑

试过使用节点0.8,这是我得到的:

 dcaclab@ubuntu:~/RubymineProjects/nodejs_consumer$ git push heroku master Counting objects: 1420, done. Compressing objects: 100% (1198/1198), done. Writing objects: 100% (1420/1420), 2.02 MiB | 24 KiB/s, done. Total 1420 (delta 249), reused 0 (delta 0) -----> Node.js app detected -----> Resolving engine versions Using Node.js version: 0.8.23 Using npm version: 1.2.21 -----> Fetching Node.js binaries -----> Vendoring node into slug -----> Installing dependencies with npm npm WARN package.json node-example@0.0.1 No repository field. npm WARN package.json node-example@0.0.1 No readme data. npm WARN package.json node@0.0.0 No repository field. npm WARN package.json rbytes@0.0.2 No repository field. npm WARN package.json faye-websocket@0.4.0 No repository field. npm WARN package.json faye-websocket@0.4.0 'repositories' (plural) Not supported. npm WARN package.json Please pick one as the 'repository' field npm WARN package.json node-example@0.0.1 No repository field. npm WARN package.json node-example@0.0.1 No readme data. npm WARN package.json node@0.0.0 No repository field. npm WARN package.json rbytes@0.0.2 No repository field. npm WARN package.json faye-websocket@0.4.0 No repository field. npm WARN package.json faye-websocket@0.4.0 'repositories' (plural) Not supported. npm WARN package.json Please pick one as the 'repository' field > weak@0.2.2 install /tmp/build_1uw8vrtz5u7yu/node_modules/dnode/node_modules/weak > node-gyp rebuild gyp http GET http://nodejs.org/dist/v0.8.23/node-v0.8.23.tar.gz gyp http 200 http://nodejs.org/dist/v0.8.23/node-v0.8.23.tar.gz make: Entering directory `/tmp/build_1uw8vrtz5u7yu/node_modules/dnode/node_modules/weak/build' CXX(target) Release/obj.target/weakref/src/weakref.o SOLINK_MODULE(target) Release/obj.target/weakref.node SOLINK_MODULE(target) Release/obj.target/weakref.node: Finished COPY Release/weakref.node make: Leaving directory `/tmp/build_1uw8vrtz5u7yu/node_modules/dnode/node_modules/weak/build' > rbytes@0.0.2 install /tmp/build_1uw8vrtz5u7yu/node_modules/shoe/node_modules/sockjs/node_modules/rbytes > node-waf configure build Checking for program g++ or c++ : /usr/bin/g++ Checking for program cpp : /usr/bin/cpp Checking for program ar : /usr/bin/ar Checking for program ranlib : /usr/bin/ranlib Checking for g++ : ok Checking for node path : not found Checking for node prefix : ok /tmp/node-node-Rkll 'configure' finished successfully (0.027s) Waf: Entering directory `/home/dcaclab/RubymineProjects/nodejs_consumer/node_modules/shoe/node_modules/sockjs/node_modules/rbytes/build' Waf: Leaving directory `/home/dcaclab/RubymineProjects/nodejs_consumer/node_modules/shoe/node_modules/sockjs/node_modules/rbytes/build' Traceback (most recent call last): File "/tmp/node-node-Rkll/bin/node-waf", line 16, in <module> Scripting.prepare(t, os.getcwd(), VERSION, wafdir) File "/tmp/node-node-Rkll/bin/../lib/node/wafadmin/Scripting.py", line 145, in prepare prepare_impl(t, cwd, ver, wafdir) File "/tmp/node-node-Rkll/bin/../lib/node/wafadmin/Scripting.py", line 135, in prepare_impl main() File "/tmp/node-node-Rkll/bin/../lib/node/wafadmin/Scripting.py", line 188, in main fun(ctx) File "/tmp/node-node-Rkll/bin/../lib/node/wafadmin/Scripting.py", line 386, in build return build_impl(bld) File "/tmp/node-node-Rkll/bin/../lib/node/wafadmin/Scripting.py", line 405, in build_impl bld.compile() File "/tmp/node-node-Rkll/bin/../lib/node/wafadmin/Build.py", line 268, in compile os.chdir(self.bldnode.abspath()) OSError: [Errno 2] No such file or directory: '/home/dcaclab/RubymineProjects/nodejs_consumer/node_modules/shoe/node_modules/sockjs/node_modules/rbytes/build' npm ERR! weird error 1 npm ERR! not ok code 0 ! Failed to rebuild dependencies with npm ! Heroku push rejected, failed to compile Node.js app To git@heroku.com:dcaclab-simulator.git ! [remote rejected] master -> master (pre-receive hook declined) error: failed to push some refs to 'git@heroku.com:dcaclab-simulator.git' 

所以rbytes软件包已经保存了两年了,那时节点已经从node-waf构build系统切换到了node-waf 。 从节点v0.10.0 ,不再包含sh: node-waf: not found因此sh: node-waf: not found错误消息。 我想你有几个select(按照优先顺序):

  1. 使用更现代的模块,而不是rbytes
  2. 说服rbytes作者更新以支持最近的节点并发布一个新版本
  3. 叉rbytes和自己修复它
  4. 将package.json引擎设置为节点0.8,然后重试

编辑

那么,错误消息#2仍然看起来像rbytes无法正确构build。 我不得不深入研究这个包,特别是要了解错误。 不知道如何/为什么它在本地工作,但在Heroku有问题,但我认为是时候让rbytes维护人员做一些维护。

在Ubuntu中重新编译了最新版本的node.js之后,我遇到了这个问题。 根据Peter Lyon的build议,这个问题与node-gyp不在一起。 通常,从预编译的软件包安装时,这不是问题(aptitude,默认情况下rhel repos通常包含node-gyp)。

但是,如果你是从源头上构build的,那么node-gyp可能就不存在了,这就是我所遇到的问题。

这为我解决了这个问题:

 sudo npm install -g node-gyp 

之后,运行npm install工作正常,错误消失了!

远离rbytes,通常来自任何未被维护的模块,特别是做一些像crypto一样重要和微妙的东西。 通过使用Node的本地encryption模块,您可以获得所需的一切。 请参阅http://nodejs.org/api/crypto.html#crypto_crypto_randombytes_size_callback

 crypto.pseudoRandomBytes(256) 

我面临同样的问题,只是删除现有的node_module目录。 然后运行npm install。 而已