Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

node.js のインストール・アップデート・バージョン切替えの手順(nodebrew、Mac)

More than 3 years have passed since last update.

ホームディレクトリにインストールするための手順。環境はMac OSX 10.11 El Capitan。以下、ターミナルでの操作。

修正(2014-06-07):PATHを通す箇所、.bashrc→.bash_profileに変更(Macでは.bash_profileから読み込ませる必要がある)。

すでにインストーラーで入れた node.js と npm が入っている場合、一旦アンインストールする

インストーラーでインストールした node.js のアンインストール

lsbom -f -l -s -pf /var/db/receipts/org.nodejs.pkg.bom \
| while read i; do
  sudo rm /usr/local/${i}
done
sudo rm -rf /usr/local/lib/node \
     /usr/local/lib/node_modules \
     /var/db/receipts/org.nodejs.*

npm(ホームディレクトリにある)のアンインストール
sudo rm -rf ~/.npm

nodebrew のインストールと設定

インストール。ホームディレクトリで以下コマンド
curl https://raw.githubusercontent.com/hokaccha/nodebrew/master/nodebrew | perl - setup
ホームディレクトリにインストールされる(.nodebrewディレクトリ)

インストールできたか確認(※helpにハイフン不要)
nodebrew help

ヘルプが表示されない場合はPATHを確認
echo $PATH

"ホームディレクトリ/.nodebrew/current/bin"へのPATHが通っていなければ、PATHを通す。viでホームディレクトリ/.bash_profile を編集。無ければ作成
vi ホームディレクトリ/.bash_profile

.bash_profileに追記
vi操作:iで編集モード、escキーで戻り、:wqで上書き保存
export PATH=$HOME/.nodebrew/current/bin:$PATH
ターミナル再起動する(or source ~/.bash_profile
上記コマンドでPATHを確認。/Users/taku_n/.nodebrew/current/bin が追加されていればO.K.

特定バージョンを使いたいなら.bash_profile に以下を追記
nodebrew use v0.11

nodebrew自身を最新版にアップデート
nodebrew selfupdate

node.js,npmのインストールとバージョン切替え

nodebrew でインストール済みの node.js のバージョンのリストを確認
nodebrew ls
現在使用中のバージョン(current:v0.0.0)を覚えとく
Use of uninitialized value $a1 in numeric comparison (<=>) at /Users/(ユーザ)/.nodebrew/current/bin/nodebrew line 675. とメッセージが出る場合は、rm /Users/(ユーザー)/.nodebrew/node/.DS_Store で解消

一応 nodebrew 自身を最新版にアップデート
nodebrew selfupdate

node.js のインストール ※600MB以上あり結構時間かかるので注意
最新版:nodebrew install latest
安定版:nodebrew install stable
特定バージョン:nodebrew install v8.5.0

バージョンの切替え
(シンボリックリンク ~/.nodebrew/current が書き換えられる)
最新版:nodebrew use latest
安定版:nodebrew use stable
特定バージョン:nodebrew use v8.5.0

バージョンが無事切り替わっているか確認
node -v

補足。あるスクリプトを「一時的に」特定のバージョンで実行したい場合
(例:app.js を v6.11 で実行)
nodebrew exec v6.11.0 -- node app.js

npm自身に新しいバージョンが出てるかチェック(今は同梱なので不要?)
npm -v
→ 最新バージョンをチェック

最新版が出てたらアップデート
npm update -g npm

使っていたパッケージのインストール or 旧バージョンのパッケージにエイリアスを貼り使えるようにする
(パッケージはバージョンごとのディレクトリ内(~/.nodebrew/node/vx.x.x/lib/node_modules)にあるため、nodebrew use で node.js のバージョンを切り替えると、切替え前のバージョンでインストールしていたパッケージ群は使えなくなる)

新バージョンに移行後、旧バージョンを削除する、もしくは将来削除する可能性がある場合は新規にインストールする(良いやり方が用意されてそうな気がする。あれば教えてください)。

~/.nodebrew/node/vx.x.x[旧バージョン]/lib/node_modules
で旧バージョンのパッケージ名をコピペしエディタ等で半角スペース区切りに整形

新バージョンに切り替えた状態でnpmでグローバルにインストール
例) npm install -g csslint gulp gulp-cli jshint npm-check-updates phplint sass-lint

補足:移行後のバージョンに切り替えている状態で nodebrew migrate-package vx.xx.xx(移行前のバージョン) とすると、移行前バージョンでインストールしていたパッケージ群を現在のバージョンから使えるようにしてくれる。しかし、これは、~/.nodebrew/node/vx.x.x(現バージョン)/lib/node_modules/ にハードリンク(エイリアス)を作成するというものであり、実ファイルをコピーしてくれるわけではないので、移行前のバージョンを削除すると使えなくなる。なお、パスを通す必要がある(~/.nodebrew/node/vx.x.x/bin 中に反映)ので、node_modules 中の各パッケージのディレクトリを新バージョンのそれにコピーするだけでは動作しない。パッケージごとにパスを通す作業を考えると、新規にインストールした方が楽という判断。

node.jsの特定バージョンのアンインストール

アップデートした場合、何か問題が起きた時に戻せるように元のバージョンはしばらく残しといた方が良いと思う。

nodebrew uninstall v7.9.0

さらに

nodebrew clean v7.9.0

削除後残ってるゴミファイルがないかどうかの確認は
~/.nodebrew/src/~/.nodebrew/node を確認(nodebrew ls の出力と比較)

nodebrew のアンインストール・入れ直し

nodebrew コマンド としても反応が無くなり(エラーは出ない)ハマった時があった。
一旦アンインストールして入れ直そうと .nodebrew ディレクトリを削除し、上記インストールのワンライナーを実行してもインストールできなかった。
git.io/nodebrewをホームディレクトリにダウンロード、perl nodebrew setup で入れ直すことができた。完了後、ダウンロードした git.io/nodebrew は削除。

参考サイト

oreo3@github
日々勉強しつつ、できる範囲でWeb制作等をしています。 デザイン、SEO、マーケティング、WordPress
https://nagaishouten.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away