我在公司代理后面作業。我的 npm 配置如下:
$ npm config get
...
https_proxy = "http://proxy.my-domain.com:8080"
https-proxy = "http://proxy.my-domain.com:8080"
proxy = "http://proxy.my-domain.com:8080"
...
使用這些設定,我可以很好地安裝一些包,但不能安裝其他包。例如$ npm i react,作業正常,而安裝@babel/core會引發 ECONNRESET 錯誤。
$ npm i @babel/core
npm ERR! code ECONNRESET
npm ERR! syscall read
npm ERR! errno -54
npm ERR! network read ECONNRESET
...
奇怪的是,我可以使用 yarn 安裝包(與 npm 一樣為代理配置),但它也告訴我我有網路問題(即使它成功安裝了包??)
$ yarn add @babel/core
...
? Done in 2.99s.
info There appears to be trouble with your network connection. Retrying...
info There appears to be trouble with your network connection. Retrying...
info There appears to be trouble with your network connection. Retrying...
我不知道為什么它適用于紗線,但不適用于 npm。這是 npm 除錯日志的樣子:
73 silly tarball no local data for @jridgewell/sourcemap-codec@https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz. Extracting by manifest.
74 silly tarball no local data for @jridgewell/trace-mapping@https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz. Extracting by manifest.
75 silly tarball no local data for @jridgewell/set-array@https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz. Extracting by manifest.
76 verbose stack Error: read ECONNRESET
76 verbose stack at TLSWrap.onStreamRead (node:internal/stream_base_commons:217:20)
77 verbose cwd /Users/justinsmith/Dev/test-npm
78 verbose Darwin 21.4.0
79 verbose node v18.9.0
80 verbose npm v8.19.1
81 error code ECONNRESET
82 error syscall read
83 error errno -54
有人知道為什么會這樣嗎?
uj5u.com熱心網友回復:
tl;博士將此添加到我的 ~./npmrc 提供了一個臨時修復:
# This is what I already had set
proxy=http://proxy.my-domain.com:8080/
https-proxy=http://proxy.my-domain.com:8080/
https_proxy=http://proxy.my-domain.com:8080/
# This is what I added
strict-ssl=false
registry=http://registry.npmjs.org/
maxsockets=3
這迫使 npm 使用 http 而不是 https 發出請求,并將并行請求的數量限制為三個。
這樣做的一個原因是,很明顯,公司代理在將檔案轉發給客戶端之前正在掃描檔案中的惡意軟體。顯然,npm 通過 TLS 并行發出太多請求會使惡意軟體掃描程式不堪重負,最終拒絕某些連接。
另一方面,Yarn 會重試幾次,而 npm 只會拋出錯誤并放棄。
一個長期的解決方案是讓您的 IT 部門將 npm 添加到惡意軟體掃描排除串列中。
完全歸功于這篇博文,它提供了這些有用的解決方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/530110.html
標籤:npmnpm-安装
