テクノロジー · 実用ガイド
npm の「getaddrinfo EAI_AGAIN」—DNS を変える前に resolver context を証明する
失敗した shell、CI、WSL、container と正確な registry hostname を固定し、その場で名前解決を検証してから proxy、TLS、registry を分離します。

「getaddrinfo EAI_AGAIN」は名前解決が一時的に失敗したことを示します。npm の停止や、browser と失敗 process が同じ resolver を使うことまでは証明しません。
元の shell、CI runner、WSL、container 内で registry と proxy を記録し、同じ context で解決を確認します。hostname が解決してから connect、TLS、HTTP へ進みます。
正確な caller と hostname を固定
完全な npm error、command、時刻、shell、IDE、service、CI、WSL、container の別を保存します。別 context の browser 結果を代用しません。
credential を出さずに実効 registry と proxy を記録し、引数、環境変数、project/user/global npmrc の由来も確認します。
失敗 context 内で名前解決を検証
同じ user、namespace、network で正確な hostname を繰り返し解決します。container や CI は内部で試験し、host 成功と混同しません。
resolver 設定、search domain、VPN、split DNS、nameserver 到達性を記録し、最初から企業 DNS を公開 DNS に置換しません。
DNS と proxy・registry transport を分離
実効 registry に npm ping を実行します。EAI_AGAIN なら resolver 分岐を維持し、解決後の timeout、certificate、HTTP status は別の層として扱います。
proxy と https-proxy の由来を先に記録します。proxy hostname 自体も解決が必要で、誤りを証明した設定だけを直します。
container、WSL、CI を別分岐に
Docker では container network と DNS を host と比較し、失敗した build または runtime stage 内で検証します。再起動だけでは原因を証明しません。
WSL と CI では生成された resolver file、VPN timing、job image を記録し、単一 runner の問題を全体設定へ広げません。
bypass なしで完了を確認
同じ caller で解決、npm ping、元の npm install/ci を再実行し、hosts 固定や公開 DNS override を残さず成功を確認します。
断続的なら build window をまたいで複数回成功させ、前後の時刻と変更された境界を台帳に残します。
