npmでパッケージインストール時に、依存パッケージが見つからないというエラーを回避する


npmでパッケージをインストールしている際に、依存パッケージが見つからずにエラーになってしまうことがあります。

次の例では、generator-marionetteパッケージをインストールしている際に、colorsパッケージのバージョン0.3.0がインストールできずにエラーになっています。

cond@derby:marionette-x$ npm install generator-marionette
npm http GET https://registry.npmjs.org/generator-marionette
npm http 200 https://registry.npmjs.org/generator-marionette
npm http GET https://registry.npmjs.org/generator-marionette/-/generator-marionette-0.1.5.tgz
npm http 200 https://registry.npmjs.org/generator-marionette/-/generator-marionette-0.1.5.tgz
npm http GET https://registry.npmjs.org/generator-buster
npm http GET https://registry.npmjs.org/underscore.string

......

npm http GET http://packages:5984/colors/-/colors-0.3.0.tgz
npm ERR! fetch failed http://packages:5984/colors/-/colors-0.3.0.tgz
npm ERR! network getaddrinfo ENOTFOUND
npm ERR! network This is most likely not a problem with npm itself
npm ERR! network and is related to network connectivity.
npm ERR! network In most cases you are behind a proxy or have bad network settings.
npm ERR! network
npm ERR! network If you are behind a proxy, please make sure that the
npm ERR! network 'proxy' config is set properly.  See: 'npm help config'

npm ERR! System Linux 3.2.0-58-generic
npm ERR! command "/home/cond/nvm/v0.10.25/bin/node" "/home/cond/nvm/v0.10.25/bin/npm" "install" "generator-marionette"
npm ERR! cwd /home/cond/tmp/marionette-x
npm ERR! node -v v0.10.25
npm ERR! npm -v 1.3.24
npm ERR! syscall getaddrinfo
npm ERR! code ENOTFOUND
npm ERR! errno ENOTFOUND
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     /home/cond/tmp/marionette-x/npm-debug.log
npm ERR! not ok code 0
cond@derby:marionette-x$

これは、リポジトリ(?)に記録されているcolorsパッケージのURLのホスト名が間違っているのが原因です。

対症療法ですが、あらかじめ単独でcolors@0.3.0をインストールしておけば、問題なくインストールできます。

具体的には、11行目に示されているURL


http://packages:5984/colors/-/colors-0.3.0.tgz

の「packages:5984」という部分を「registry.npmjs.org」に置き換えたURLを指定して、npm installを実行します。

つまり、コマンド

$ npm install http://registry.npmjs.org/colors/-/colors-0.3.0.tgz

を実行すれば、colorパッケージのバージョン0.3.0がインストールされます。

cond@derby:marionette-x$ npm install http://registry.npmjs.org/colors/-/colors-0.3.0.tgz
npm http GET http://registry.npmjs.org/colors/-/colors-0.3.0.tgz
npm http 200 http://registry.npmjs.org/colors/-/colors-0.3.0.tgz
colors@0.3.0 node_modules/colors
cond@derby:marionette-x$

これでcolors@0.3.0がインストールできました。もう1度次のコマンドを実行してやれば、今度は失敗せずにgenerator-marionetteパッケージがインストールされます。

$ npm install generator-marionette