【问题标题】:Failed to rebuild dependencies with npm无法使用 npm 重建依赖项
【发布时间】:2013-05-22 12:53:21
【问题描述】:

当我试图将在本地运行良好的 nodejs 应用程序推送到 heroku 时,这是我在终端中得到的:

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'

【问题讨论】:

    标签: node.js heroku dnode


    【解决方案1】:

    所以rbytes 包已经有 2 年没有改变了,并且在那段时间节点已经从node-waf 构建系统切换到node-gyp。从节点 v0.10.0 开始,不再包含 node-waf,因此出现 sh: node-waf: not found 错误消息。我认为你有几个选择(按优先顺序):

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

    编辑

    嗯,错误消息 #2 看起来仍然没有正确构建 rbytes。我必须深入研究该软件包以了解该错误。不确定它如何/为什么在本地为您工作,但在 heroku 上遇到问题,但我认为是时候让 rbytes 维护者进行一些维护了。

    【讨论】:

    • 谢谢,基本上我会尝试node 0.8,稍后我会联系rbyes的作者更新他们的模块..
    【解决方案2】:

    在 Ubuntu 中重新编译最新版本的 node.js 后,我遇到了这个问题。根据 Peter Lyon 的建议,这个问题与 node-gyp 不存在有关。通常,从预编译包安装时,这不是问题(aptitude 和 rhel 存储库通常默认包含 node-gyp)。

    但是,如果您是从源代码构建,则很可能 node-gyp 不存在,这就是导致我的问题的原因。

    这为我解决了:

    sudo npm install -g node-gyp
    

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

    【讨论】:

      【解决方案3】:

      远离 rbytes,一般来说远离任何未维护的模块,尤其是做一些重要而微妙的事情的模块,比如加密。您可以使用 Node 的本机加密模块获得所需的一切。见http://nodejs.org/api/crypto.html#crypto_crypto_randombytes_size_callback

      crypto.pseudoRandomBytes(256)
      

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题,只需删除现有的 node_module 目录。然后运行 ​​npm 安装。就是这样

        【讨论】:

          猜你喜欢
          • 2021-04-21
          • 2018-05-30
          • 1970-01-01
          • 1970-01-01
          • 2021-09-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多