概要
npm
のプロキシ設定は, proxy:port
ではなく protocol://proxy:port
とする必要があるらしい。
今のところちゃんとしたエビデンスのあるドキュメントにたどり着いていないので、資料があれば教えて頂けると幸いです。
実行環境はこちら。
OS | node | npm |
---|---|---|
OS X El Capitan | v7.3.0 | 4.5.0 |
ある日突然 npm install
が終わらなくなった
--verbose
オプションをつけたところ、どうやら接続に失敗して何度もリトライしているらしい。
出たエラーがこちら。
npm info retry will retry, error on last attempt: Error: tunneling socket could not be established, cause=connect EHOSTUNREACH
プロキシ設定が怪しそう
何もしてないのに壊れた 何もしてないはずがないので原因を考えてみる。
プロキシ環境下であり、前日に直接接続の環境では普通に動いていたことを考えると、怪しいのはプロキシ関連。疑ったことと実際の状況は以下のとおりである。
疑ったこと | 実情 |
---|---|
プロキシが設定されてない | 設定されていた |
プロキシのアドレスが間違っている | 合っていた |
プロキシのポート番号が間違っている | 合っていた |
ユーザ認証でエラーが出ている | ユーザ認証不要 |
他のソフトもネットワークエラーを吐く | 少なくともcurlもgitは通常通り動作 |
最後の1つが決定的で、「おそらくプロキシ設定は合っているけど動作しない」という考えに至り始めていた。
もしかしてプロトコル?
散々悩んだりstackoverflowを彷徨ったりした後、「もしかしてプロトコルを明記しないとダメ?」と思い当たる。以前の npm
が正常に動作していた時と、設定ファイルをいじった後のアドレス設定は以下のようになっていた。
いじる前のアドレス | いじった後のアドレス |
---|---|
http://proxy:port |
proxy:port/ |
そこで前のようにプロトコルも指定してみたところ、無事インストールができた。
この後確認のために1度プロトコルを外したプロキシアドレスを設定したところ、同じエラーが確認できた。原因はやはりプロトコルの明記にあるらしい。
まとめ
- npmはプロキシのアドレスやポート番号が合っていてもプロトコルを明記しないと繋がらない場合がある
- 明記しなくても繋がる場合があるかどうかは不明(80番や443番を使うプロキシならいけるかも?)
-
--verbose
オプションは原因究明に役立つ