Node.js 7系以下が必要なプロジェクトがあり、node.js のバージョンを切り替える必要があったので nodebrew + avn を使うことにしたときのメモ。
うまくいかなかった時に試したことを一応自分用にメモしておくのがこの記事の目的なので、すっきりわかりやすい記事をご希望の場合は最終項の参考記事を参考にするのが良いかと思います。
1. 方法
前提
- Mac
- Node.js をインストーラーからインストール済み
- nodebrew を homebrew でインストール済み
nodebrew と avn
- nodebrew だけでも node.js のバージョンは切り替えられる
- avn を使えば、プロジェクトのルートディレクトリに置いた
.node-version
のバージョンに合わせて node.js のバージョンを切り替えてくれる
その他切り替える方法として anyenv (参考 https://www.to-r.net/media/anyenv/)というのもあるらしいです。
手順
- グローバルにavnとavn-nodebrewをインストール&セットアップする。
npm install-g avn avn-nodebrew
avn setup
- プロジェクトのルートディレクトリに
.node-version
を作成する。 作成したファイルには使いたい node.js のバージョンを以下のようにセマンティックバージョニングで書く。
v6.17.1
- ターミナルでプロジェクト内に
cd
で移動して、以下のようにactivated
が表示されていればOK。
avn activated v6.17.1 (avn-nodebrew v6.17.1)
2. Trouble Shooting
だいぶ完結に「1.」にまとめましたが、実際は結構時間がかかりました。
やったことで覚えていることを時系列に関係なくメモだけしておきます。
node -v
をして確認したら切り替わってなかった
↑のようにバージョンが変わったように思ったけど、 node -v
で念のためバージョンを確認すると変わっていなかった...。
とりあえず、 一旦全部削除してみようと思い、一からやり直してみた。
v10.17.0
pkg で入れた node.js を削除(ついでに npm も削除)
MacにpkgでインストールしたNode.jsをアンインストールする手順を参考に削除。
以下を一行ずつ実行していく。(>がでてきても次の行を>につづけてペーストしてenterを押す)
lsbom -f-l-s-pf /var/db/receipts/org.nodejs.node.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
node.js、npm が削除されてるかどうかは以下のコマンドでチェック(バージョンがでてこなければOK)
node -v
npm -v
nodebrew を入れ直してみる
nodebrew を削除する
Nodebrew本体を削除する方法を参考に Finder or ターミナルから直接 .nodebrew
ディレクトリを削除。
(隠しファイルの表示方法はこちら)
ただ、homebrew で nodebrew を入れた場合は上記じゃ消せないときがあるので、その場合は下記のコマンドで削除。
brew uninstall nodebrew
nodebrew を入れ直す
GitHubページの通り、curlコマンドでインストール。
(homebrew でも入れれますが、削除するときにちょっと面倒だったのでcurlで入れました)
curl -L git.io/nodebrew | perl - setup
インストールしたら、パスを通す。(GitHubページには .bashrc
or .zshrc
と書かれてます)
私は .bashrc
に書きました。
export PATH=$HOME/.nodebrew/current/bin:$PATH
bashrcを更新しても、ターミナルを再起動しただけではシェルの設定が反映されないので、以下のコマンドを叩いて反映させる。
source ~/.bashrc
!!注意!!
上記を実行しただけだと
「PhpStormのTerminalでは nodebrew コマンドが使えるのに、App のターミナルで新しいタブを開いても nodebrew コマンドが使えない...」
という状況に陥りました。
これは実行系統によって読み込む設定ファイルが微妙に異なることが原因だそう。(両者のターミナルで読み込む設定が違ったみたい)
そこで、 .bashrc
の更新内容が今後自動的に .bash_profile
に反映されるようにするため、 .bash_profile
に下記コマンドを追加するとどちらでも nodebrew コマンドが使えるようになりました。
source ~/.bashrc
(↓あたりを参考に)
https://qiita.com/hiesiea/items/860c42a96b031f929b94
https://qiita.com/magicant/items/d3bb7ea1192e63fba850
avn could not activate node v6.17.1
と出る
nodebrew に activate したい node.js がインストールされていないのが原因でした。
nodebrew にインストール済みのバージョンの確認
nodebrew ls
nodebrew にバージョンをインストールする
nodebrew install-binary 6.17.1
参考
avnのGitHubページ
Nodebrewとavnを使ってNode.jsのバージョン切り替えを自動化する
ディレクトリごとに異なるバージョンのnodeを使いたいのでavnを使った話