Edited at

グローバルにインストールしたnode moduleがnot foundになる時の対処

More than 5 years have passed since last update.

いつのまにかグローバルにインストールしていたはずのbowerやgrunt(grunt-cli)コマンドを叩くとnot foundって言われてしまうようになっていました。

復旧しましたが、同じような方がいらっしゃるかも知れないので、メモ的に残しておきます。

(あくまで僕はこれで復旧しました、というだけなので、他の方には当てはまらないかもしれません。)


環境


  • OS : Mac OSX Marvericks

  • npm: 1.3.11


bowerコマンドが使えなくなった例

▶ which bower

bower not found


node moduleがグローバルにインストールされているか調べる

まずは下記コマンドでグローバルのnode_modulesディレクトリの場所を調べます。

npm root -g

表示されたディレクトリの中にmoduleがいれば、インストールは正常です。

▶ ll /opt/boxen/nodenv/versions/v0.10/lib/node_modules

drwxr-xr-x 18 nobody staff 612B 8 13 21:59 bower
..


pathを確認する

インストールができているのに実行できなければ、パスが通っていないのでは、と思い至ります。僕はこれでした。

まずは下記コマンドでnpmがグローバルで使用しているディレクトリを調べます。

npm bin -g

表示されたディレクトリの中身を確認します。

npmでインストールしたコマンドラインツールの実行スクリプトは、ここにsymlinkが貼られるはずです。

▶ ll /opt/boxen/nodenv/versions/v0.10/bin

lrwxr-xr-x 1 root staff 35B 8 13 21:59 bower -> ../lib/node_modules/bower/bin/bower
..

ここまで正常なら、pathを通せば実行できるようになるはずです。

以下のコードではnpm bin -gの結果にpathを通すようにしています。

export PATH=$PATH:`npm bin -g`


補足

グローバルのnpm rootやnpm binの場所はnpm config set prefix /foo/bar/pathで変更可能です。

npm config set prefix /usr/localとすれば/usr/local/lib/node_modulesがインストール先になります。