経緯
nodeのバージョンは18を入れていて、本来ならnpmはバージョン9になっているはずなのですが、なぜかnodeが18、npmは6.14になっていました。
$ npm update -g npm
アップデートを実行しても9に上がらず、6台のまま。
解消した時のメモです。
原因
原因としてはおそらくパッケージ版のnodeをインストールした上で後入れでnなどのnode管理ツールを使ったことで何かおかしくなってしまったのかなと。
パッケージ版と使用しているnを削除し、今後はnodebrewのみを導入することにしました。
削除する前に
利用しているパッケージをメモ
$ sudo npm ls -g --depth=0
グローバルにインストールしている一覧がこれで取得できます。メモメモ。
インストールしているものをアンインストール
いきなり現在インストールしているnpmやnを削除してしまうと、後でnodebrewを入れたときに上記のコマンドで一覧に出てこないのにパッケージがなぜか使えるという事象が起きてしまいます。
おそらくnodebrewが管理するpathを対象にnpmは検索するので一覧には出ないけど、管理範囲外にパッケージが残っているから使える状態。使えるならいいんじゃ?と思うかもしれませんがアプデとかしたくなった時に困るかもなので、インストールしているものはnodebrew管理下でインストールし直します。
$ npm uninstall -g [package-name]
[]部分は各自インストールしているパッケージ名を入れて実行してください
node,npm,nの削除
こちらに詳しく書いてありました
参考
こちらを参考にしつつ私が行ったのは
・npmのアンインストール
・ソース版のnodeをアンインストール
・各種残骸ファイルの削除
homebrewからnodebrewをインストール
上記ページの下部に手順が載っています。
パスを通した後は、一度ターミナルを再起動しないとコマンドは反映されないので、手順通りやったのにコマンドが使えない!と慌てないように気をつけましょう
メモしたインストールしていたものをインストールする
nodebrewが使えるようになったのを確認したら最初にメモをしたものを全てインストールし直しましょう。
無事相応のnpmのバージョンになりました。
$ node -v
v20.3.0
$ npm -v
9.6.7
インストールしたパッケージを削除せず先にnpmをアンインストールしてnode管理ツールを導入してしまったとき
npmでインストールしているグローバルの一覧に無いのにコマンド使える!って状態になってしまったとき
以下はAngularCliをnodebrew管理下に置き直したときの例です
今使えるAngularCliのパスを調べる
$ which ng
表示されたパスを使って削除する
$ sudo rm -r [/usr/local/bin/ng]
[]部分はwhichで調べたパスです
改めてcliをインストールする
$ npm i -g @angular/cli
$ which ng
nodebrewを利用している時のパスで表示されます