🔖
npmパッケージのインストール時エラー対応 "npm ERR! code ECONNREFUSED"
はじめに
- yarnパッケージのインストール時にエラーとなった為、対処法をメモする。
- npmコマンドでインストールする際は、IPv6のアドレスに対して接続しようとしているっぽい。
- なので、Windows OSでIPv6よりもIPv4を優先することで恒久対応となる。以下、確認プロセスをメモする。
エラーメッセージ
npm ERR! code ECONNREFUSED
npm ERR! syscall connect
npm ERR! errno ECONNREFUSED
PS C:\Users\hiroharu.tanaka\Desktop\vsCode\react18> node -v
v18.16.1
PS C:\Users\hiroharu.tanaka\Desktop\vsCode\react18> npm -v
9.5.1
PS C:\Users\hiroharu.tanaka\Desktop\vsCode\react18> npm install -g yarn
npm ERR! code ECONNREFUSED
npm ERR! syscall connect
npm ERR! errno ECONNREFUSED
npm ERR! FetchError: request to https://registry.npmjs.org/yarn failed, reason: connect ECONNREFUSED 2606:4700::6810:1a23:443
npm ERR! at ClientRequest.<anonymous> (C:\Program Files\nodejs\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14)
npm ERR! at ClientRequest.emit (node:events:513:28)
npm ERR! at TLSSocket.socketErrorListener (node:_http_client:502:9)
npm ERR! at TLSSocket.emit (node:events:525:35)
npm ERR! at emitErrorNT (node:internal/streams/destroy:151:8)
npm ERR! at emitErrorCloseNT (node:internal/streams/destroy:116:3)
npm ERR! at process.processTicksAndRejections (node:internal/process/task_queues:82:21)
npm ERR! FetchError: request to https://registry.npmjs.org/yarn failed, reason: connect ECONNREFUSED 2606:4700::6810:1a23:443
npm ERR! at ClientRequest.<anonymous> (C:\Program Files\nodejs\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14)
npm ERR! at ClientRequest.emit (node:events:513:28)
npm ERR! at TLSSocket.socketErrorListener (node:_http_client:502:9)
npm ERR! at TLSSocket.emit (node:events:525:35)
npm ERR! at emitErrorNT (node:internal/streams/destroy:151:8)
npm ERR! at emitErrorCloseNT (node:internal/streams/destroy:116:3)
npm ERR! at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
npm ERR! code: 'ECONNREFUSED',
npm ERR! errno: 'ECONNREFUSED',
npm ERR! syscall: 'connect',
npm ERR! address: '2606:4700::6810:1a23',
npm ERR! port: 443,
npm ERR! type: 'system',
npm ERR! requiredBy: '.'
npm ERR! }
npm ERR!
npm ERR! If you are behind a proxy, please make sure that the
npm ERR! 'proxy' config is set properly. See: 'npm help config'
npm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\hiroharu.tanaka\AppData\Local\npm-cache\_logs\2023-06-21T11_20_54_260Z-debug-0.log
curlでの接続確認
- curl経由で接続してもエラーにはならない。
PS C:\Users\hiroharu.tanaka\Desktop\vsCode\react18> curl https://registry.npmjs.org/yarn
StatusCode : 200
StatusDescription : OK
Content : {"_id":"yarn","_rev":"323-6be00da4deef316fca2193d354f35fea","name":"yarn","description":"ð¦ð Fast, reliable, and s
ecure dependency management.","dist-tags":{"latest":"1.22.19","rc":"1.22.0","berr...
RawContent : HTTP/1.1 200 OK
Connection: keep-alive
CF-Ray: 7dabee85ecd38a5c-NRT
CF-Cache-Status: REVALIDATED
Access-Control-Allow-Origin: *
Vary: accept-encoding, accept
x-amz-replication-status: FAILED
x-...
Forms : {}
Headers : {[Connection, keep-alive], [CF-Ray, 7dabee85ecd38a5c-NRT], [CF-Cache-Status, REVALIDATED], [Access-Control-Allow-Origin
, *]...}
Images : {@{innerHTML=; innerText=; outerHTML=<IMG alt='\"Yarn\"' src='\"https://github.com/yarnpkg/assets/blob/master/yarn-kitt
en-full.png?raw=true\"'>; outerText=; tagName=IMG; alt=\"Yarn\"; src=\"https://github.com/yarnpkg/assets/blob/master/ya
rn-kitten-full.png?raw=true\"}, @{innerHTML=; innerText=; outerHTML=<IMG alt='\"Yarn\"' src='\"https://github.com/yarnp
kg/assets/blob/master/yarn-kitten-full.png?raw=true\"'>; outerText=; tagName=IMG; alt=\"Yarn\"; src=\"https://github.co
m/yarnpkg/assets/blob/master/yarn-kitten-full.png?raw=true\"}, @{innerHTML=; innerText=; outerHTML=<IMG alt='\"Yarn\"'
src='\"https://github.com/yarnpkg/assets/blob/master/yarn-kitten-full.png?raw=true\"'>; outerText=; tagName=IMG; alt=\"
Yarn\"; src=\"https://github.com/yarnpkg/assets/blob/master/yarn-kitten-full.png?raw=true\"}, @{innerHTML=; innerText=;
outerHTML=<IMG alt='\"Yarn\"' src='\"https://github.com/yarnpkg/assets/blob/master/yarn-kitten-full.png?raw=true\"'>;
outerText=; tagName=IMG; alt=\"Yarn\"; src=\"https://github.com/yarnpkg/assets/blob/master/yarn-kitten-full.png?raw=tru
e\"}...}
InputFields : {}
Links : {@{innerHTML=<IMG alt='\"Yarn\"' src='\"https://github.com/yarnpkg/assets/blob/master/yarn-kitten-full.png?raw=true\"'>
; innerText= ; outerHTML=<A href='\"https://yarnpkg.com/\"'><IMG alt='\"Yarn\"' src='\"https://github.com/yarnpkg/asse
ts/blob/master/yarn-kitten-full.png?raw=true\"'> </A>; outerText= ; tagName=A; href=\"https://yarnpkg.com/\"}, @{innerH
TML=<IMG alt='\"Yarn\"' src='\"https://github.com/yarnpkg/assets/blob/master/yarn-kitten-full.png?raw=true\"'> ; innerT
ext= ; outerHTML=<A href='\"https://yarnpkg.com/\"'><IMG alt='\"Yarn\"' src='\"https://github.com/yarnpkg/assets/blob/m
aster/yarn-kitten-full.png?raw=true\"'> </A>; outerText= ; tagName=A; href=\"https://yarnpkg.com/\"}, @{innerHTML=<IMG
alt='\"Yarn\"' src='\"https://github.com/yarnpkg/assets/blob/master/yarn-kitten-full.png?raw=true\"'> ; innerText= ; ou
terHTML=<A href='\"https://yarnpkg.com/\"'><IMG alt='\"Yarn\"' src='\"https://github.com/yarnpkg/assets/blob/master/yar
n-kitten-full.png?raw=true\"'> </A>; outerText= ; tagName=A; href=\"https://yarnpkg.com/\"}, @{innerHTML=<IMG alt='\"Ya
rn\"' src='\"https://github.com/yarnpkg/assets/blob/master/yarn-kitten-full.png?raw=true\"'> ; innerText= ; outerHTML=<
A href='\"https://yarnpkg.com/\"'><IMG alt='\"Yarn\"' src='\"https://github.com/yarnpkg/assets/blob/master/yarn-kitten-
full.png?raw=true\"'> </A>; outerText= ; tagName=A; href=\"https://yarnpkg.com/\"}...}
ParsedHtml : mshtml.HTMLDocumentClass
RawContentLength : 423640
- 以下メッセージより、どうもIPv6経由でアクセスしようとしているみたい。
- 名前解決の際にIPv4を優先させれば、解決しそう。
npm ERR! code: 'ECONNREFUSED',
npm ERR! errno: 'ECONNREFUSED',
npm ERR! syscall: 'connect',
npm ERR! address: '2606:4700::6810:1a23',
npm ERR! port: 443,
npm ERR! type: 'system',
npm ERR! requiredBy: '.'
- nslookupを実行すると、IPv6アドレス群の中に「2606:4700::6810:1a23」を確認。
- IPv4経由でアクセスできるようにしてみる。
- curlコマンドの場合は、結果的にIPv4が選択され、npmの場合はIPv6がデフォルト選択されているのではないか。
PS C:\Users\hiroharu.tanaka\Desktop\vsCode\react18> nslookup registry.npmjs.org
サーバー: UnKnown
Address: 2408:50:46ab:0:21f:67ff:fe06:12bc
権限のない回答:
名前: registry.npmjs.org
Addresses: 2606:4700::6810:1023
2606:4700::6810:1a23
2606:4700::6810:1423
2606:4700::6810:1523
2606:4700::6810:1623
2606:4700::6810:1323
2606:4700::6810:1123
2606:4700::6810:1923
2606:4700::6810:1823
2606:4700::6810:1b23
2606:4700::6810:1223
2606:4700::6810:1723
104.16.27.35
104.16.26.35
104.16.23.35
104.16.17.35
104.16.22.35
104.16.19.35
104.16.25.35
104.16.24.35
104.16.16.35
104.16.18.35
104.16.20.35
104.16.21.35
暫定対処
-
今回は、IPv4アドレス群の中から一つ選択し、/etc/hostsに追記してみる。
-
管理者権限での/etc/hostsの書き込みは以下記事を参照した。
- https://qiita.com/tiibun/items/5719869552ee5b713d83
- もしくはメモ帳を「管理者として実行」すれば良い。
- PowerShellで以下コマンド入力
> powershell -NoProfile -ExecutionPolicy unrestricted -Command "start notepad C:\Windows\System32\drivers\etc\hosts -verb runas"
- 名前解決の際には、以下IPv4が選択されるように/etc/hostsに追記する。
104.16.27.35 registry.npmjs.org
- 無事インストール完了
PS C:\Users\hiroharu.tanaka\Desktop\vsCode\react18> npm install -g yarn
added 1 package in 750ms
恒久対応
- そもそもWindows OSがIPv4よりIPv6優先としているため、優先順位を変更すればよい。
- Windows PowerShellを「管理者として実行」する。
PS C:\Users\hiroharu.tanaka> netsh interface ipv6 show prefixpolicies
アクティブ状態を照会しています...
優先順位 ラベル プレフィックス
---------- ----- --------------------------------
50 0 ::1/128
40 1 ::/0
35 4 ::ffff:0:0/96
30 2 2002::/16
5 5 2001::/32
3 13 fc00::/7
1 11 fec0::/10
1 12 3ffe::/16
1 3 ::/96
- ::ffff:0:0/96 がIPv4-mapped IPv6 address となる。この優先順位を上げてやればよい。
PS C:\WINDOWS\system32> netsh interface ipv6 set prefixpolicy ::ffff:0:0/96 55 4
OK
- 優先順位の第1に来ていることを確認する。これで、エラーメッセージの事象は発生しないことを確認できた。
PS C:\WINDOWS\system32> netsh interface ipv6 show prefixpolicies
アクティブ状態を照会しています...
優先順位 ラベル プレフィックス
---------- ----- --------------------------------
55 4 ::ffff:0:0/96
50 0 ::1/128
40 1 ::/0
30 2 2002::/16
5 5 2001::/32
3 13 fc00::/7
1 11 fec0::/10
1 12 3ffe::/16
1 3 ::/96
その他
-
さらにこの後、以下記事を参考にyarn実行エラーを回避した。
https://qiita.com/yslius/items/a28a7b581420209bd084 -
ようやくスタートライン
Discussion