firebaseコマンドを使ってデプロイしたい。
だがnpmを使ってfirebase-toolsをインストールしてもfirebaseコマンドが認識されない。CLIが使えないのだ。
npm install -g firebase-tools
インストールはされてるみたいだが、firebaseを使うと以下のエラーが発生する。
‘firebase’ は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
これはコマンドプロントでパスが正常に通ってないときに見られるエラー文である。この解決方法を備忘録として残す。
FirebaseのCLIをインストールしても使えないエラー
バッチファイルとして認識されていないときは大抵PATHの通し方が間違っている場合が多い。
今回はnpmをインストールしたときのPATH指定が間違っていたらしい。ということで修正してみる。
export PATH=$PATH:`npm bin -g`
これでnpmのPATHが正常に通るはずらしいが、そもそもexportコマンドがcmdで使えなかった。さらにこれについて追及してみる。
そもそもcmdではexportコマンドがないことに気づく。exportコマンドはbash特有のコマンドらしい。cmdはlinux等に使われており、環境変数設定にはsetコマンドを使うとのことだった。
Shin
ということで使ってみる。
set PATH=$PATH:`npm bin -g`
これで厄介なことが発生。他のすべてコマンドが使えなくなってしまった。幸い影響範囲がこのターミナルのみだったので閉じれば他のcmdでコマンドが復活していた。
調べてみたところ、setでの環境変数変更の仕方が間違っていたようだ。まずは以下のコマンドでnpmにPATHが通っているか確認する。
npm bin -g
C:\\usr\\local
(not in PATH env variable)
not in PATH env variableということはnpmが存在するパスが環境変数のPATHに通っていないということを言っている。なので通してみる。
set PATH=%PATH%;C:\\usr\\local
これで一時的にnpmを環境変数のPATHに通すことができた。これで再度firebaseコマンドを実行してみる。
firebase login
無事。ログインに成功した。
なぜ自力で解決できなかったのか
- ターミナルの種類の違い
- 環境変数PATHの通し方
環境変数は一度PATHを通しておけば無駄なパス指定をせずとも毎回楽にコマンドを呼び出すことができるから理解はしておこう。
ターミナルの種類は良く調べておいた方がよさそうだ。まだcmdやpowershellの違いが理解できていない。それによって使うコマンドも変わってくるらしい。
なお、setxコマンドはグローバルに環境変数のPATHを変更してしまうので使うときには注意が必要であるとのこと。