尝试从git submodule
工作流程转移到npm install
工作流程。我有大约60个独立的库,并将每个库转换为适当的npm模块。现在我package.json
有一个非常大的dependencies
部分,其中每一行都是这样的:
"libraryN": git+ssh://git@gitlab.company.local:libraryN.git
这样有60条线。每个库可能都有自己的依赖项,但大多数都没有依赖项。而且他们彼此独立。
现在,当我执行npm install
时,它会暂停几秒钟(构建单个依赖项列表,我认为)并且因以下SSH错误而失败:
ssh_exchange_identification: Connection closed by remote host
做一些实验我发现限制package.json
中的依赖项数量会有所帮助。因此,拥有10个或更少的依赖项总是可以正常工作而没有任何错11到14之间偶尔会失败,15次以上会一直失败。
看起来它与我本地git存储库服务器的同时ssh连接有关。检查了它的日志 - 没有发现任何可疑的信息。
问题 - 如何一次安装(和管理)所有60个依赖项并避免与ssh相关的问题?
谢谢。
答案 0 :(得分:1)
我有同样的问题,似乎能够通过增加MaxStartups和MaxSessions来解决它(默认情况下sshd有10个)
/etc/ssh/sshd_config:
...
MaxStartups 60
MaxSessions 60
答案 1 :(得分:0)
另一种解决方案可能是使用SSH连接池。将其放入~/.ssh/config
:
Host *
ControlMaster auto
ControlPath /tmp/%r@%h:%p
ControlPersist yes
EscapeChar ~
答案 2 :(得分:0)
您可能需要减少同时连接数,默认情况下为50。
以下npm配置允许限制为3个最大同时连接:
npm set maxsockets 3
自npm@3.8.0起,CLI已允许此选项。有关详细信息,请参阅this link。