运行 npm install 时多次调用回调

Posted

技术标签:

【中文标题】运行 npm install 时多次调用回调【英文标题】:Callback called more than once while running npm install 【发布时间】:2017-02-07 04:16:24 【问题描述】:

我在使用 ElasticBeanStalk 将我的 Node.JS 应用程序部署到 AWS 时遇到了一些麻烦。

部署开始后,在运行 npm install 脚本(AWS 默认)时,我收到以下奇怪的错误:

material-ui@0.15.4 node_modules/material-ui
  ├── simple-assign@0.1.0
  ├── react-addons-create-fragment@15.3.2
  ├── react-addons-transition-group@15.3.2
  ├── keycode@2.1.7
  ├── warning@3.0.0 (loose-envify@1.2.0)
  ├── inline-style-prefixer@2.0.4 (hyphenate-style-name@1.0.1, bowser@1.4.6)
  ├── lodash@4.16.2
  ├── react-event-listener@0.2.1 (fbjs@0.8.5)
  └── recompose@0.20.2 (symbol-observable@0.2.4, change-emitter@0.1.2, hoist-non-react-statics@1.2.0, fbjs@0.8.5)
  npm ERR! Linux 4.1.17-22.30.amzn1.x86_64
  npm ERR! argv "/opt/elasticbeanstalk/node-install/node-v4.3.0-linux-x64/bin/node" "/opt/elasticbeanstalk/node-install/node-v4.3.0-linux-x64/bin/npm" "--production" "install"
  npm ERR! node v4.3.0
  npm ERR! npm  v2.14.12

  npm ERR! Callback called more than once.
  npm ERR!
  npm ERR! If you need help, you may report this error at:
  npm ERR!     <https://github.com/npm/npm/issues>

  npm ERR! Please include the following file with any support request:
  npm ERR!     /tmp/deployment/application/npm-debug.log

谁能帮我调试这个问题?我已经花了太多时间试图了解正在发生的事情,但到目前为止没有任何结果。

谢谢!

【问题讨论】:

【参考方案1】:

显然,某些 AWS 区域确实存在与 npm 的连接问题(与此 issue 有关),我通过强制 npm 通过 http 而不是 https 下载模块来解决它。 为此,我在项目的根目录中添加了一个 .npmrc 文件,其中包含以下内容:registry=@987654322@ 感谢 @Jason Livesay 的提示和 @danilojun 帮助我找到最佳解决方案!

【讨论】:

我今天也遇到了这个问题,部署在 eu-west 地区。发现简单重试大部分时间都有效,所以确实是断断续续的,但是使用http似乎给出了更多确定性的结果。【参考方案2】:

更新npm为我解决了这个问题

npm i -g npm

【讨论】:

【参考方案3】:

我为我正在处理的项目派生的另一个解决方案是检查 node_modules 文件夹以获取源,然后禁用自动 npm 安装继承到 EB。这可以帮助具有严格依赖关系的脆弱节点应用程序。

您需要将以下脚本添加到 .ebextensions:

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/50npm.sh":
    mode: "000755"
    owner: root
    group: users
    content: |
      #!/bin/bash
      #==============================================================================
      # Copyright 2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
      #
      # Licensed under the Amazon Software License (the "License"). You may not use
      # this file except in compliance with the License. A copy of the License is
      # located at
      #
      #       http://aws.amazon.com/asl/
      #
      # or in the "license" file accompanying this file. This file is distributed on
      # an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or
      # implied. See the License for the specific language governing permissions
      # and limitations under the License.
      #==============================================================================

      #set -xe
      #DO NOT RUN NPM...project contains node_modules
      #/opt/elasticbeanstalk/containerfiles/ebnode.py --action npm-install

【讨论】:

【参考方案4】:

请粘贴完整的日志。验证虚拟机是否有足够的网络和其他资源(免费/便宜的 AWS 东西受到限制)。升级到最新的 Node/npm。当您在 github isshes 中搜索该错误时,请参阅 github npm repo 问题上的大量 cmets,例如 https://github.com/npm/npm/issues/9418#issuecomment-170244027 和其他问题。

【讨论】:

以上是关于运行 npm install 时多次调用回调的主要内容,如果未能解决你的问题,请参考以下文章

npm 错误! cb() 从未调用过!尝试运行 npm install 命令时出错

npm 错误! npm install 时超出最大调用堆栈大小(角度)

仅在需要和/或部分时运行npm install

使用 forEach 时避免回调多次调用

运行 npm install cordova 时 npm install 不起作用

npm install Unexpected token in JSON at position XXX