npmの-gをローカルユーザのディレクトリで管理する

npmのアップデートなどで、よくnpm update -g npmsudoを付け忘れて実行してしまい、何故かnpmが使えなくなることが良くありました。

ここのところ、golanggo getコマンドを使うために、GOPATHを以下のように設定するよう、.bashrcに書いていました。

if [ -e $HOME/golang ];then
    export GOPATH=$HOME/golang
    export PATH=$GOPATH/bin:$PATH
fi

このようにgolangでは、外部ライブラリのディレクトリをユーザディレクトリに全て持つことができます。これと同じことを、npmでできないかと思い調べました。

公式Documentによるとprefixがそのようです。これを/Users/yourname/npmに設定します。

$ npm config edit
prefix=/Users/yourname/npm

npm config editを使うと、~/.npmrcに設定を追加することができます。また、$HOME/npmは使えず、~/npmとすると自動で上記に書き換えられました。

また、$home/npm/binへパスを通すようにします。

if [ -e $HOME/npm/bin ];then
    export PATH=$HOME/npm/bin:$PATH
fi

これで、npmをインストールします。sudoは付けません。

$ npm install -g npm

これで、npmコマンドのパスを確認すると、ユーザディレクトリになります。

$ which npm
/Users/yourname/npm/bin/npm

これで以後、npm install -g packagenamesudoを付ける必要はなくなりました。やったね。