背景
firebaseをインストールしたのですが、Node.jsのバージョンが古くて「Incompatibleだよ」と言われました。
そのためNode.jsをアップデートしようとしたのですが、つまづいてしまったので、解決した方法をこの記事に書くことにしました。
症状
Firebaseコマンドを利用しようとしたらターミナルがこのように表示してきました。
Firebase CLI v11.16.0 is incompatible with Node.js v12.19.0 Please upgrade Node.js to version ^14.18.0 || >=16.4.0
どうやらNode.jsのバージョンを16.4.0以上にアップグレードしなければいけないようです。
HomebrewおよびNodebrewをインストールしており、Nodebrewを利用してNode.jsのアップデートを試行しました。
Node.jsアップグレード失敗。"Darwin arm64 is not supported"
nodebrewでnode.jsをアップグレードを試しましたが、失敗し以下のエラーを吐きました。
Darwin arm64 is not supported
こうなる理由は、私のNodebrewのバージョン(v1.0.1)では、「arm64」、つまりApple M1はサポートされていないためのようです。
そのため、Node.jsの前に、まずNodebrewのアップデートが必要になりました。
まずは「Nodebrewのアップデート」、次に「Node.jsのアップグレード」の手順を紹介します。
解決
Homebrewをアップデート
一応Homebrewもアップデートしておきます。Homebrewのアップデートのコマンドは以下の通りです。
brew update
nodebrewアップデート
nodebrewのアップデートを以下のコマンドで実行します。
brew install nodebrew
しかし、、、成功しているようなのですが、以下のコマンドでバージョンを確認すると、
nodebrew -v
//結果: nodebrew 1.0.1
なんと、、、全く変わっていません。
(実際には、アップデートは出来ていました)
パスを通す
上記のようにバージョンが変わっていないように見えたのは、以下のパスを通していないためでした。
export PATH=$HOME/.nodebrew/current/bin:$PATH
このパスをディレクトリの .zshrc か .bashrc に記入する必要があります。
.zshrc か .bashrcか、についてですが、
自分のMacのデフォルトのシェルを調べるコマンドがあります。以下のコマンドを実行します。
echo $SHELL
私の場合はこれで .zshrc だというのが判明しました。
そのため、.zshrc にパスを記入することにします。
パスの通し方
以下のコマンドを実行し、進めました。
//ホームディレクトリに移動
cd ~/
// ディレクトリ内のファイルを一覧表示(.zshrcなどは隠しファイルのためこのコマンドが必要
ls -a
// 設定ファイルがない場合にはこれで作成(.zshrcの場合)
touch .zshrc
// .zshrcを開く
open ~/.zshrc
これで設定ファイル(.zshrc)が開けます。
テキストエディットで開けるはずなので、そこに以下のパスを記入します。
export PATH=$HOME/.nodebrew/current/bin:$PATH
その後、ターミナルでパス変更を反映させます。
source ~/.zshrc
これでパスが通りました。
改めてnodebrewのバージョンを再確認します。
nodebrew -v
//結果: nodebrew 1.1.0
これでNodebrewのアップデートがついに成功しました。
Node.jsのアップグレード
Nodebrewが正しくアップデートできたので、次はNode.jsです。以下のコマンドで最新の安定版がインストールできます。
nodebrew install-binary stable
バージョン確認のため、以下のコマンドを叩きます
node -v
//結果: v18.12.1
Node.jsのアップグレードが成功したことが分かりました。これでOKです。
※これでもバージョンが変わらないようであれば、以下のコマンドを利用してください。バージョンを指定できます。
nodebrew use 18.12.1
// バージョンはインストールしたものを入力してください
ちなみに、これによりFirebaseのエラーは突破したのですが、別のエラー(digital envelope routines::unsupported)が発生しましたが、これは以下の記事の内容で解決しました。
参考になったページ
ありがとうございました。