node.js と npm のバージョンを管理するのに nodist を使っています。
先日、
node.js が 16.14.0 LTS に上がっているのに気づいたので、nodist で更新しました。
ところで、
こちらに書いてあるように node.js と npm はバージョンの組み合わせに注意しておく必要があります。
ということで、node を 16.14.0 に上げたのでいつものように以下のようにやって、npm のバージョンを合わせるようにしました。
$ nodist npm match
そしたら、npm も 8.3.1 に上がりました。
ふむ、どうやら更新があったようです。
んで、
依存モジュールの更新とかもあるかなと、自分のとあるプロジェクトに対して npm を使って更新をかけたら・・・
npm ERR! code MODULE_NOT_FOUND
npm ERR! Cannot find module '@npmcli/arborist'
なんかエラーが出る!
うむぅ・・・@npmcli/arborist が見つからないようです。
そこで、
nodist をインストールしたフォルダを調べてみると、
(Nodistを導入したフォルダ)/npmv/8.3.1/node_modules/@npmcli
がそれに該当することがわかりました。
そこに、arborist というファイルは存在するのですが、何かおかしい・・・。
まず第一に、本来ならフォルダのはず。第二に、種類が .symlink とかになっている・・・だけどクリックしてもシンボリックリンクとして機能してくれない・・・。
なんじゃこりゃ?
ときに、
npm が更新された際に、以下のようにコンソールに表示されていました。
https://codeload.github.com/npm/cli/tar.gz/v8.3.1 [===============] 90497/90785 KiB 99% 0.1s
なので、こいつを直にダウンロードして確認してみることにしました。
ちなみに、こちらからもダウンロードできます。というか↑のURLはそれの別名っぽい。
で tar.gz を展開してみると、やはり同じようになっている。
よく分からないけど、シンボリックリンクなファイルとしてそのままアーカイブされてしまっているけど、Windowsで展開するとちゃんとシンボリックリンクとして機能してくれないために、おかしくなっている模様です。Windows特有な問題っぽい・・・。たぶん、Linux や Mac とかなら問題は起きないと思われます。
どうやら、
該ファイルは、(Nodistを導入したフォルダ)/npmv/8.3.1/workspaces/arborist へのシンボリックリンクのようです。そこには確かにそれらしいファイルが入っています。
ということで、そのフォルダをそのまま本来の場所へコピーすれば行けそうです。
ただ、
workspaces という名前になっているのがちょっと気になります。作業用フォルダなのでしょうか?
ということで、本家であるここから 16.14.0 のzipをダウンロードして、その中身を使うことにしました。展開して確認してみると何か少し違うように見える。こっちのがファイルが少ないようです。とにかくもこっちなら間違いないはずなので、@npmcli/arborist なフォルダを nodist の該当位置へコピーしてやりました。これで直ってくれるはず・・・だがしかし(^_^;)
これだけではダメでした。
というかシンボリックリンクなやつがまだいくつもありました(T_T)
(Nodistを導入したフォルダ)/npmv/8.3.1/node_modules/libXXXとか・・・。
個別に対応するのは面倒だし、間違いも起こりそうです。
なので、npm/node_modules 配下を全て置き換えることにしました。そうしたら無事に npm のコマンドが動くようになりました。
ふぅ、どうやらこれで直ってくれたようです。
やれやれ(^_^;)
それにしても 8.3.1 だけの問題なのかちょっと気になったので、8.3.0 や 8.5.0 とかについても tar.gz をダウンロードして確認してみました。そしたら、8.3.1 と同様にシンボリックリンクなことになっていました。
ということは、今後も nodist を使って npm のバージョンを上げると、その度に同じ問題が起こることになりそうです(^_^;) というか、nodist は各プラットフォーム向けにビルドされたものではなく、元ソースをそのまま使っているっぽい感じ。
うむぅ・・・どうしたものか。
nodist はメンテされてないっぽいし、nvm-windows に変えてみようかな。
ネットで調べてみると nodist はもう使わない方が良さそうな雰囲気(^_^;) こちらを参考にアンイストールしました。普通にアンイストールしただけではゴミファイルが残ってしまうようです。代替として、こちらを参考に nvm-windows をインストールしました。nvm を使って目的バージョンの node.js をインストールすれば、それに合わせて npm も自動で更新してくれるようです。nodist の時は手動だったので、nvm の方が便利ですね。ただ nvm を使う時は、管理者権限で実行した方が良さそうです。特に use コマンドを使う際は、シンボリックリンクを張る操作があるみたいで、管理者権限なコマンドプロンプトからやらないと何かエラーが出てしまう感じです。何でやろ? エラーメッセージが文字化けしてて読めないけど(^_^;) そんなわけで、nodist は止めて nvm に切り替えることにします。