ページ

2012年3月10日土曜日

Tower.jsのnpm ERR! にはキャッシュを疑え。

Tower.jsに限った話ではないのですが。

npm install でエラーが出て、update や uninstall を繰り返していると、今までインストールできていたパッケージがインストールできなくなったりします。

僕の場合、design.io や tower のインストールでこんなエラーが多発してどうしても治りませんでした。

$ npm install -g design.io
npm http GET https://registry.npmjs.org/design.io
npm http 200 https://registry.npmjs.org/design.io
npm http GET https://registry.npmjs.org/design.io/-/design.io-0.3.0-6.tgz
npm http 200 https://registry.npmjs.org/design.io/-/design.io-0.3.0-6.tgz
npm ERR! error installing design.io@0.3.0-6
npm ERR! error rolling back design.io@0.3.0-6 Error: EPERM, operation not permitted '/Users/inouetomoyuki/.nvm/v0.6.12/lib/node_modules/design.io/node_modules/express/node_modules/___connect.npm/package'

npm ERR! Error: EPERM, operation not permitted '/Users/inouetomoyuki/.nvm/v0.6.12/lib/node_modules/design.io/node_modules/express/node_modules/___connect.npm/package'
npm ERR! 
npm ERR! Please try running this command again as root/Administrator.
npm ERR! 
npm ERR! System Darwin 11.3.0
npm ERR! command "node" "/Users/inouetomoyuki/.nvm/v0.6.12/bin/npm" "install" "-g" "design.io"
npm ERR! cwd /Users/inouetomoyuki
npm ERR! node -v v0.6.12
npm ERR! npm -v 1.1.4
npm ERR! path /Users/inouetomoyuki/.nvm/v0.6.12/lib/node_modules/design.io/node_modules/express/node_modules/___connect.npm/package
npm ERR! code EPERM
npm ERR! message EPERM, operation not permitted '/Users/inouetomoyuki/.nvm/v0.6.12/lib/node_modules/design.io/node_modules/express/node_modules/___connect.npm/package'
npm ERR! errno {}
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/inouetomoyuki/npm-debug.log
npm not ok

npm install で途中、ERRが起きてしまうと中途半端なキャッシュが残ってしまうことがあるとのこと。キャッシュファイルが原因でインストールできない現象が起きてしまうというわけです。キャッシュファイルは ~/.npm/.npm か ~/.npm/.npm-cache 配下に保存されます。

design.ioやtower.jsの巨大なパッケージ群では、cleanしていないパッケージもあるのかしら、と妄想。たぶん iniとredis。

で、キャッシュファイルを削除するには、以下のオプションを使います。

$ npm cache clean

ERRが出る場合があります。(この時点でもERR無視して npm install したらERRなくインストールできましたが)

cacheを一覧するコマンドは、

$ npm cache ls
~/.npm/cloud9/
~/.npm/cloud9/0.5.1/
~/.npm/cloud9/0.5.1/package/
~/.npm/cloud9/0.5.1/package/support/
~/.npm/cloud9/0.5.1/package/support/socket.io-client/
~/.npm/cloud9/0.5.1/package/support/socket.io-client/lib/
~/.npm/cloud9/0.5.1/package/support/apf/
~/.npm/cloud9/0.5.1/package/support/apf/elements/
~/.npm/cloud9/0.5.1/package/support/apf/elements/video/
~/.npm/tower/
~/.npm/tower/0.3.2/
~/.npm/tower/0.3.2/package/
~/.npm/tower/0.3.2/package/lib/
~/.npm/tower/0.3.2/package/lib/tower/
~/.npm/tower/0.3.2/package/lib/tower/generator/
~/.npm/tower/0.3.2/package/lib/tower/generator/generators/
~/.npm/tower/0.3.2/package/lib/tower/generator/generators/tower/
~/.npm/tower/0.3.2/package/lib/tower/generator/generators/tower/app/
~/.npm/tower/0.3.9-10/
~/.npm/tower/0.3.9-10/package/
~/.npm/tower/0.3.9-10/package/lib/
~/.npm/tower/0.3.9-10/package/lib/tower/

...

です。階層で表示されます。~/.npm/{パッケージ名}/{バージョン番号} 毎に分類されています。npm cache clean直後ですと、キャッシュを潜っていくとディレクトリしか残っていないようです。

思い切って、~/.npm以下を削除してみます。

$ cd ~/.npm
$ ls -la
total 0
drwxr-xr-x   5 inouetomoyuki  inouetomoyuki   170  3 10 22:15 .
drwxr-xr-x  85 inouetomoyuki  inouetomoyuki  2890  3 10 22:15 ..
drwxrwxrwx   3 inouetomoyuki  inouetomoyuki   102  3 10 21:52 cloud9
drwxrwxrwx   3 inouetomoyuki  inouetomoyuki   102  3 10 22:15 npm
drwxrwxrwx   5 inouetomoyuki  inouetomoyuki   170  3 10 22:15 tower
$ rm -fr cloud9/ npm/ tower/
$ npm cache clean

npm cache clean でエラーが出なくなりました。

再度、tower.jsをインストールして起動してみます。

$ npm install design.io -g
$ npm install tower -g
$ tower new sample
$ cd sample
$ sudo npm install
$ mongod --dbpath ~/Library/MongoDB_Db/ & 
$ node server.js
   info  - socket.io started
[Sat, 10 Mar 2012 13:46:47 GMT] INFO Tower development server listening on port 3000

info:  Name: design.io-watcher::device_manager hook::listening                          Type: hook            Data: 5000
info:  Name: design.io-watcher::device_manager hook::started                            Type: hook            Data: 5000



無事インストールと起動ができました。(最後のsudoはdesign.ioが/Library/Ruby/Gems/1.8のgemを使ってインストールしているため)

何故かわからないけど インストールできない。githubのIssueもない。といった場合、キャッシュを疑ってみるといいことあるかもしれません。

0 件のコメント:

コメントを投稿