いつのまにかグローバルにインストールしていたはずの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
がインストール先になります。