nvmを使うまでの経緯

Debianでnodejsをインストールする際、

$ sudo apt-get install -y nodejs npm

としてやれば済むが、aptでインストールすると、実行コマンドが

$ node

ではなく、

$ nodejs

となり、npmでなんやかんやする際に

sh: 1: node: not found

と残念な結果に終わる

なんでDebianでこんな事になっているかというと

$ sudo apt-cache search node

node - Amateur Packet Radio Node program (transitional package)
nodejs - evented I/O for V8 javascript

既にnodeというコマンドが使われてたようで、nodejsとなったらしいです

で、じゃあどうするのがいいのと思って調べてみた結果、シンボリックリンクを貼ったり色々対処法はあったけど、nvmを使うのが良さそうだったので、nvmでnodeをインストールする事にした

nvmのインストール

creationix/nvm

Manual Insallに書いてある通りにした

$ export NVM_DIR="$HOME/.nvm" && (
  git clone https://github.com/creationix/nvm.git "$NVM_DIR"
  cd "$NVM_DIR"
  git checkout `git describe --abbrev=0 --tags --match "v[0-9]*" origin`
) && . "$NVM_DIR/nvm.sh"

$ echo 'export NVM_DIR="$HOME/.nvm"' >> $HOME/.bash_profile
$ echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"' >> $HOME/.bash_profile

$ source ~/.bash_profile

nvmの使い方メモ

// nodejsのバージョンを見る(ローカル)
$ nvm ls

// nodejsのバージョンを見る(リモート)
$ nvm ls-remote

// nodejsをインストール(最新版)
$ nvm install node

// nodejsをインストール(バージョンを指定)
$ nvm install node 6.9.1

// 使うバージョンをえらぶ(複数のバージョンをインストールした場合に使用)
$ nvm use 6.9.1

sudoでのnpmのグローバルインストールについて

npm install -gでグローバルにインストールする場合、いつもPermission Errorとなるので、

$ sudo npm install -g [PACKAGE]

としていたが、nvmを使用した場合、sudoを使おうとすると、個々のユーザの.bash_profileでしか環境変数が設定されていないので、

$ sudo npm install -g [PACKAGE]
npm: command not found.

となる。

sudoについて色々調べてみた結果、nvmを使用してnodeをインストールした場合、/home/[USER]/.nvm/versions/node/[VERSION]にnodeがインストールされ、npm install -gした際には、ここのlib/node_modules/[PACKAGE]にインストールされる事になるので、結論としてsudoは不要という事だった

nvm useでバージョンを切り替えた場合に参照先が変わるため再インストールしないといけないが、それは妥当な気がするのでよしとした

試しに、nvm useでバージョンを切り替えて環境変数を確認してみた

// 7.0.0にしてみる
$ nvm use 7.0.0
Now using node v7.0.0 (npm v3.10.8)

$ env | grep node
NVM_PATH=/home/username/.nvm/versions/node/v7.0.0/lib/node
PATH=/home/username/.nvm/versions/node/v7.0.0/bin:/usr/lib64/ccache:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/username/.local/bin:/home/username/bin
NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist
NVM_BIN=/home/username/.nvm/versions/node/v7.0.0/bin

// 6.9.1にしてみる
$ nvm use 6.9.1
Now using node v6.9.1 (npm v3.10.8)

$ env | grep node
NVM_PATH=/home/username/.nvm/versions/node/v6.9.1/lib/node
PATH=/home/username/.nvm/versions/node/v6.9.1/bin:/usr/lib64/ccache:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/username/.local/bin:/home/username/bin
NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist
NVM_BIN=/home/username/.nvm/versions/node/v6.9.1/bin