npm 和 bower 更新大部分时间都失败,具体取决于网络

npm and bower updates fail majority of the time depending on the network

我在执行 npm update 时遇到 Bower 和 npm 的问题。

jrquick$ npm update
npm ERR! git fetch -a origin (ssh://git@bitbucket.org/[PRIVATE_PROJECT]/[PRIVATE_REPOSITORY].git) ssh_exchange_identification: read: Connection reset by peer
npm ERR! git fetch -a origin (ssh://git@bitbucket.org/[PRIVATE_PROJECT]/[PRIVATE_REPOSITORY].git) fatal: Could not read from remote repository.
npm ERR! git fetch -a origin (ssh://git@bitbucket.org/[PRIVATE_PROJECT]/[PRIVATE_REPOSITORY].git) 
npm ERR! git fetch -a origin (ssh://git@bitbucket.org/[PRIVATE_PROJECT]/[PRIVATE_REPOSITORY].git) Please make sure you have the correct access rights
npm ERR! git fetch -a origin (ssh://git@bitbucket.org/[PRIVATE_PROJECT]/[PRIVATE_REPOSITORY].git) and the repository exists.
npm ERR! Darwin 15.6.0
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "update"
npm ERR! node v6.3.0
npm ERR! npm  v3.10.8
npm ERR! code 128

npm ERR! Command failed: git fetch -a origin
npm ERR! ssh_exchange_identification: read: Connection reset by peer
npm ERR! fatal: Could not read from remote repository.
npm ERR! 
npm ERR! Please make sure you have the correct access rights
npm ERR! and the repository exists.
npm ERR! 
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!     /Users/jrquick/[PRIVATE_PROJECT]/[PRIVATE_REPOSITORY]/npm-debug.log

当 运行从我工作的网络连接中连接时,大部分时间都失败并出现此错误。但是,我可以去星巴克或我的公寓并 运行 成功执行相同的命令。

关于如何解决这个问题有什么想法吗?我对网络没有任何控制权,但我认为可能会更改数据包大小或 git 或 npm 中的某种设置以避免这种情况。

谢谢。

如果这是一个限制问题,因为 by John D., the theoretical solution (as mentioned in "GitLab, NPM, and SSHd MaxStartups") 将增加服务器 sshd 配置的 MaxStartups 值。

既然是 bitbucket.org,您当然无权访问该配置。

另一种解决方法是查看在使用 https 而不是 ssh 时问题是否仍然存在(并自动使用您的凭据,由 credential helper 缓存)

git config --global url."https://bitbucket.org/".insteadOf git@bitbucket.org:

我通过在构建时降低网络连接速度来解决这个问题。 (在 mac 上,您可以使用 Apple 的 "Network Link Conditioner" 来做到这一点。

一个长期的解决方案是使用您自己的 npm 实例并在您的服务器上更改这些设置。

npm 可以解决这个问题,至少通过一个可配置的选项,但原因是 github,gitlab 等不希望对他们的服务器有这么多并发调用,如果他们应该像这样限制连接。