Proxy環境下でnpmをインストールしようとしたらすんなりいかなかったのでメモ。行き当たりばったりで解決できるようなことですが。
社内のwindowsマシンでもnode.js使いたかったんです。なのでcygwinです。
npmのインストール
npmのインストールは"基本的には"下記のコマンド一発で大丈夫です。
% curl http://npmjs.org/install.sh | sh
Proxy環境ならオプションつけてやりましょう。
% curl --proxy http://hogehoge:port http://npmjs.org/install.sh | sh
が、
gzip: stdin: unexpected end of file tar: これは tar アーカイブではないようです tar: 前のエラーにより失敗ステータスで終了します It failed
とかなんとか出力されて失敗します。何がダメかというとinstall.shの中でもcurlを使ってるのでそっちにも--proxyをつけないといけません。スマートじゃないですが一旦ファイルを落として編集しました。
% curl --proxy http://hogehoge:port -o install.sh http://npmjs.org/install.sh
install.shの二箇所でcurlを使ってるとこがあるのでそこに--proxyオプションをつけてやります。これで大丈夫なはず。
これでおk!It worked!
モジュールのインストール
この流れでexpressをnpmで入れようとすると失敗しました。
% npm install express npm info it worked if it ends with ok npm info using npm@0.3.17 npm info using node@v0.4.2 npm ERR! Error: ECONNREFUSED, Could not contact DNS servers npm ERR! at IOWatcher.callback (dns.js:53:15) npm ERR! Report this *entire* log at <http://github.com/isaacs/npm/issues> npm ERR! or email it to <npm-@googlegroups.com> npm ERR! Just tweeting a tiny part of the error will not be helpful. npm ERR! System CYGWIN_NT-5.1 1.7.7(0.230/5/3) npm ERR! argv { remain: [ 'express' ], npm ERR! argv cooked: [ 'install', 'express' ], npm ERR! argv original: [ 'install', 'express' ] } npm not ok
Could not contact DNS serversとか言ってますね。こちらのサイトによるとnode.jsのビルド時にresolv.confを使う方法が適用されるため、resolv.confにnameserverを書いてないとダメみたいです。
なので/etc/resolv.confにDNSのIPを設定しましょう。下記の例ではGoogle Public DNSのプライマリとセカンダリのIPアドレスを設定してます。
nameserver 8.8.8.8 nameserver 8.8.4.4
そしてしれっとproxyの設定もしときましょう。
% npm config set proxy http://hogehoge:port
今度こそおk!!