プロキシ環境下で、 electron-quick-start レポジトリを npm install
しようとしたり、 npm で electron-prebuilt モジュールをインストールしようとすると、 npm config set https-proxy "http://proxy.example.com:8080/"
とプロキシを設定しているのにもかかわらず、
Error: connect ECONNREFUSED 192.30.252.128:443 at Object.exports._errnoException (util.js:949:11) at exports._exceptionWithHostPort (util.js:972:20) at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1080:14)
などとエラーが出てしまうことがある。
特定の通信に、 npm のプロキシの設定が使われていないのだ。
netsh winhttp import proxy source=ie
のコマンドを実行するといった解決方法が紹介されているが、 これは WinHTTP を使った通信全体に、 IE の proxy の設定をコピーするものであって、今回の問題の本質ではない。
あくまで、 npm config の https-proxy や proxy で設定したプロキシで、エラーとなっている通信を実行させたい場合の解決方法について述べよう。
解決方法
結論を先に言うと、 npm config --global https-proxy
ではなく、 npm config https-proxy
を使って プロキシを設定する のだ。
そもそも、どこの通信でエラーになっているのか
electron-quick-start を実行した場合も、 内部的には electron-prebuilt モジュールをインストールしていて、その electron-prebuilt モジュールのインストール中に github から electron の ビルド済zip を DL しようとしてエラーになっている。
その electron-prebuilt のコードを見てみると、 どうやら electron-download というパッケージを使って electron のビルド済zip をダウンロードしているらしい。
では、その electron-download の中身はというと…
おや? なんか rc モジュール使って、 npm config の proxy, https-proxy 設定取得しているっぽいぞ?
rc.js モジュールで取得されている npm config 設定
試しに、 自分の手元で rc.js を実行して、 proxy の情報がとれるか試してみる。
> node
> require('rc')('npm')
{ 'init.author.name': 'MYNAME',
_: [],
configs: [ 'C:\\Users\\USER\\.npmrc' ],
config: 'C:\\Users\\USER\\.npmrc' }
--global
オプションの保存先の %APPDATA%\npm\etc\npmrc
や %ALLUSERSPROFILE%\npm\etc\npmrc
が読み込まれていねぇじゃねぇか!
うーん、これは rc モジュールの仕様っぽい…?
ということで、とりあえず表題のトラブルを回避するには、 --global
オプションを使用せず、%USERPROFILE%\.npmrc
に保管されるように npm config proxy / https-proxy と設定をすれば良いというわけだ。
node.js を ユーザごとにインストールした場合は、 そもそも --global
オプション時の保存先が %APPDATA%\npm\etc\npmrc
となり、 結局 ユーザごとのフォルダに保管されるため、 --global
オプションを指定する理由は全くないしな。
ピンバック: TypeScript の async/await を Electron で使ってみる | Aqua Ware つぶやきブログ
この現象にハマり解決はしたのですが、結局原因がわからず終いでした。
おそらく試行錯誤しているうちに意図せず個別設定側にもProxyを設定し
解決していたようです。
原因がわからなかったので、次発生したらどうしようかという
不安があったのですがこちらの記事を拝見しスッキリしました。
一週間ほどハマって大変困っていたところ、
この記事を見つけ、解決しました。
本当にありがとうございます!
proxy環境はハマる予感はしてましたが、助かりました。
electron以外のパッケージはインストール出来てたのでproxy設定完了してたと思い込んでました。。
改めてありがとうございます。
ピンバック: TypeScript の async/await を Electron で使ってみる | Aqua Ware つぶやきブログ