运行 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 时超出最大调用堆栈大小(角度)