ホームディレクトリにインストールするための手順。
環境は Mac OSX 10.15.7 Catalina。以下、ターミナルでの操作。
すでにインストーラーで入れた 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 -L git.io/nodebrew | perl - setup
ホームディレクトリにインストールされる(.nodebrewディレクトリ)
インストールできたか確認(※helpにハイフン不要)
nodebrew help
ヘルプが表示されない場合はPATHを確認
echo $PATH
"ホームディレクトリ/.nodebrew/current/bin" へのPATHが通っていなければ PATH を通す。vi 等でホームディレクトリの .zshrc (無ければ作成。bash なら .bash_profile) に export PATH=$HOME/.nodebrew/current/bin:$PATH
を追記。
vi操作:iで編集モード、escキーで戻り、:wqで上書き保存
export PATH=$HOME/.nodebrew/current/bin:$PATH
ターミナル再起動する(or source ~/.zshrc
)
今一度 PATH を確認。
echo $PATH
/Users/taku_n/.nodebrew/current/bin が追加されていればO.K.
特定バージョンを使いたいなら.zshrc に以下を追記
nodebrew use v14.17.6
nodebrew自身を最新版にアップデート
nodebrew selfupdate
node.js, npm のインストール/アップデートとバージョンの切替え
nodebrew でインストール済みの node.js のバージョンのリストを確認
nodebrew ls
メモ:Use of uninitialized value $a1 in numeric comparison (<=>) at /Users/(ユーザ)/.nodebrew/current/bin/nodebrew line 675.
とメッセージが出る場合は、rm /Users/(ユーザー)/.nodebrew/node/.DS_Store
で解消
現在使用中のバージョン(current:vX.X.X)と、最新の node.js のバージョン(安定版、最新版)を比較。
現在インストールしているパッケージのリストをエディタにコピペしておく(A)
npm list --depth=0 -g
一応 nodebrew 自身を最新版にアップデート
nodebrew selfupdate
node.js のインストール ※600MB以上あり結構時間かかるので注意
nodebrew install v16.8.0
(要バージョン指定。昔できた nodebrew install latest/stable
はエラーとなる)
バージョンの切替え(= ~/.nodebrew/current のシンボリックリンクの切替え)
-
nodebrew use v16.8.0
バージョンを指定
(nodebrew use latest/stable
で最新版/安定版に切り替えることはできなくなった)
バージョンが無事切り替わっているか確認
node -v
→ v16.8.0
npm のアップデート(必要なら)
npm も同時にインストールされるが、最新版になっていないこともある。
最新バージョンをチェックし、現在のバージョンを確認。
npm -v
→ 7.21.0
新しいバージョンが出ているならアップデート
npm update -g npm
バージョンを再度確認
npm -v
→ 7.21.1
node.js のバージョン切替えをした場合のパッケージの移行
バージョンごとに切り分けての管理となるので、上記の nodebrew use
でnode.jsのバージョンを切り替えると、切替え前にnpmでインストールしたパッケージモジュール群が使えなくなる。
~/.nodebrew/node/vx.x.x[切り替え前のバージョン]/lib/node_modules を
~/.nodebrew/node/vx.x.x[切り替え後のバージョン]/lib/node_modules に以降しても良いが、今回は移行後のバージョンに切り替えている状態で、移行前のバージョンで入れていたパッケージを新たにインストールする。
元バージョンでインストールされていたパッケージのリスト(A)を整形(全て最新版にするならバージョン外す)し、npmでグローバルにインストール。
例) npm install -g @wordpress/env eslint firebase-tools gulp-cli http-server npm npm-check-updates typescript yarn
脆弱性があるパッケージを修正
npm audit fix
(完全ではない。今回は開発環境で使うのでエラーが出ててもう動けば良しとする)
一応、現在インストールされているパッケージを確認
npm list --depth=0 -g
メモ:パッケージのインストール場所は、
~/.nodebrew/node/vx.x.x[バージョン]/lib/node_modules
※上の @wordpress/env のように、サブディレクトリ構成のものもある
メモ:node.js を移行後のバージョンに切り替えた状態で 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 v16.4.2
nodebrew clean v16.4.2
削除後残ってるゴミファイルがないかどうかの確認は
~/.nodebrew/src/
と ~/.nodebrew/node
を確認(nodebrew ls
の出力と比較)
メモ
一時的に特定のバージョンを使う
あるスクリプトを「一時的に」特定のバージョンで実行したい場合
(例:app.js を v16.4.2 で実行。もちろん、v16.4.2 がインストールされた状態で)
nodebrew exec v16.4.2 -- node app.js
nodebrew のアンインストール・入れ直し
nodebrew コマンド
としても反応が無くなり(エラーは出ない)ハマった時があった。
一旦アンインストールして入れ直そうと .nodebrew ディレクトリを削除し、上記インストールのワンライナーを実行してもインストールできなかった。
git.io/nodebrewをホームディレクトリにダウンロード、perl nodebrew setup
で入れ直すことができた。完了後、ダウンロードした git.io/nodebrew は削除。
参考サイト
- hokaccha/nodebrew - Github
- node.js の環境管理ツール nodebrew - Block Rockin’ Codes
- PATHを通す方法 - Memo on the Web
- Mac OS X から Node.js をアンインストールする方法 - SONICJAM Developerz Blog
- PATHを通す - Qiita
- MacでPATHを通す(ユーザー単位 or 全ユーザー)- 5log
- node.jsのversionを管理するためにnodebrewを利用する - Qiita
- MacのローカルにnodebrewでNode&npmをインストール - Qiita