プロキシ環境における npm install でパッケージをインストールするための設定
プロキシ環境において npm install
でパッケージをインストールする際によく起こるエラーやその対処方法について纏めています。
やりたいこと
いつも通り npm init
を行ったところ以下のようなエラーが出ました。
感覚的にプロキシ環境化で TLSSocket
のエラーを見たらプロキシ設定や TLS 証明書検証の失敗を疑います。
以下の通り npm は、環境変数 HTTPS_PROXY
、https_proxy
、HTTP_PROXY
、http_proxy
が設定されている場合は、プロキシアドレスとして解釈してくれるので、他のアプリケーション等でこれらの環境変数を設定していた場合は、npm init
や npm install
は正常にワークするため、何かの拍子にこれらの環境変数を削除してしまうとたちまち上記のようなエラーが出て、npm init
すら出来なくなったりします。
A proxy to use for outgoing https requests. If the
HTTPS_PROXY
orhttps_proxy
orHTTP_PROXY
orhttp_proxy
environment variables are set, proxy settings will be honored by the underlying request library. - config | npm Docs
環境変数でのプロキシ設定は他の言語のパッケージ管理アプリケーションでも使用することが多いので、誤って削除や変更したときの影響が大きいので、各パッケージ管理アプリケーションで管理できた方がベターだと思います。 (なお今回は pip のプロキシ設定の検証の関係で環境変数を消したままにしてしまっていたことが原因でした…)
環境
- OS
- Microsoft Windows 21H2
- npm
- 9.5.1
npm のプロキシ設定
npm はコンフィグでプロキシ情報を設定することができるので、環境変数に頼らずこちらで設定することにします。
以下コマンドでプロキシ情報を設定します。基本的に全部 https だと思うので https-proxy
だけで問題ないとは思いますが、念のため proxy
も設定しています。
設定後、以下コマンドでコンフィグの設定内容を確認できますので、proxy
や https-proxy
が設定されているか確認しましょう。
なお、設定したコンフィグの削除は以下のコマンドで行います。
TLS インスペクション環境化で証明書エラーが発生する場合
企業の環境等で TLS インスペクション環境で npm install
を実行する場合、以下のようなエラーがいくつか発生することがあります。
エラーその 1
エラーその 2
エラーその 3
この場合は、以下コマンドで一時的に証明書検証をオフにすることで証明書検証をスキップできます。
strict-ssl
Default:true
Type:Boolean
Whether or not to do SSL key validation when making requests to the registry via https. - config | npm Docs
ただし、この方法は証明書検証を全てスキップすることになるのであまりお勧めしません。もしこの方法をとる場合は、インストールが終わったら再び証明書検証はオンに戻しておきましょう。
本質的には TLS インスペクションに使用されている自己署名証明書を登録するべきです。証明書の特定と取得方法は こちらの記事 で紹介しているので、よろしければ参考にしてください。
証明書が用意出来たら以下のコマンドで設定できます。パスは絶対パスにしてください。
cafile
Default:null
Type:Path
A path to a file containing one or multiple Certificate Authority signing certificates. - config | npm Docs
これでエラーは解消されます。
あとがき
プロキシ環境って何かと不便ですよね…。ただ原因はどのようなパッケージマネージャーでもだいたい同じなので慣れてくるとこのパッケージマネージャーだとどう設定するんだろうみたいな思考回路になってきます。