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

Updated:

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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