EASYBOT GUIDE
npm ETIMEDOUTでパッケージを取得できない時の対処法
npm installのETIMEDOUTを、ネットワーク、DNS、プロキシ、npmレジストリ、タイムアウト設定から切り分けます。
ETIMEDOUTは、npmが接続先から規定時間内に応答を受け取れなかったことを示します。回線やDNSの不調、ファイアウォール、プロキシ、レジストリ障害などを順に確認します。
接続先を確認
npmが利用しているregistryと、ホスト名の名前解決、HTTPS接続を調べます。特定の依存パッケージだけ失敗するなら、その取得先への経路も確認します。
- npm config get registryを実行する
- DNS解決と443番ポートへの接続を確認する
- プロキシ環境変数とnpm設定を調べる
ログで別原因を探す
タイムアウトの前にENOSPC、証明書エラー、認証エラーが出ていないか読みます。ダウンロードが遅い時に、ディスクやinode不足が同時に起きている場合もあります。
- npmのdebug logで最初のエラーを読む
- df -hとdf -iで容量を確認する
- 失敗したパッケージ名と取得URLを控える
ネットワークを切り分ける
同じコマンドを何度も実行する前に、他のHTTPSサイトへ接続できるか確認します。環境管理者が許可するレジストリやプロキシを利用してください。
- 別ネットワークで同じ依存を試す
- 会社やVPSのプロキシ設定を確認する
- npm公式のサービス状況を確認する
タイムアウト値を上げる前に
大きなfetch timeout値は遅延を隠し、失敗検出を遅くするだけの場合があります。接続先や回線の問題を解決し、依存キャッシュは検証後に使います。
- 同時ダウンロード数を抑える
- 一時障害の後に一度だけ再試行する
- npm cache verifyでキャッシュを確認する