npm config -g でプロキシの設定をしているのに electron-quick-start や electron-prebuilt でコケる

Pocket

プロキシ環境下で、 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 オプションを指定する理由は全くないしな。

npm config -g でプロキシの設定をしているのに electron-quick-start や electron-prebuilt でコケる」への4件のフィードバック

  1. ピンバック: TypeScript の async/await を Electron で使ってみる | Aqua Ware つぶやきブログ

  2. この現象にハマり解決はしたのですが、結局原因がわからず終いでした。
    おそらく試行錯誤しているうちに意図せず個別設定側にもProxyを設定し
    解決していたようです。

    原因がわからなかったので、次発生したらどうしようかという
    不安があったのですがこちらの記事を拝見しスッキリしました。

  3. 一週間ほどハマって大変困っていたところ、
    この記事を見つけ、解決しました。
    本当にありがとうございます!
    proxy環境はハマる予感はしてましたが、助かりました。
    electron以外のパッケージはインストール出来てたのでproxy設定完了してたと思い込んでました。。
    改めてありがとうございます。

  4. ピンバック: TypeScript の async/await を Electron で使ってみる | Aqua Ware つぶやきブログ

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください