Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

Mise(a.k.a. rtx)でローカルにインストールされたnodeを使うには.mise.tomlに絶対パスを書くとよい

自分は処理系管理にmiseを使っている。

mise.jdx.dev

miseはASDFの精神的後継?みたいなツールで、シェルスクリプトではなくRustで書かれていたり、シンボリックリンクを回避してPATHを変更するなどのテクニックによって高速に動作するのが売りだ。

今回、ちょっとした用事でNode.js v22を使うことになった。しかしNode 22はまだリリースされていなくて、利用するにはnightly buildを利用しなければならない。

nodejs.org

miseで使えるnodeバージョンを出力するにはmise list-all nodeすれば良いのだが、当然nightly buildはここには載っておらず、正式にリリースしたものしか候補に出てこない。

% mise -v
2024.4.5 linux-x64 (d60d850 2024-04-15)
% mise list-all node
...
21.7.0
21.7.1
21.7.2
21.7.3 # 22は出てこない

困り果てて色々調べたところ、以下のようにすればよいことがわかった(mise 2024.4.5での話なので、将来的にもっと良くなるかも):

まずローカルにnodejsのビルドをダウンロードしてくる。今回は~/.nodes/22にインストールした:

# (x64 linux向けのアーティファクトをDLしている)
% wget https://nodejs.org/download/nightly/v22.0.0-nightly2024041887abd023aa/node-v22.0.0-nightly2024041887abd023aa-linux-x64.tar.xz
% tar axvf node-v22.0.0-nightly2024041887abd023aa-linux-x64.tar.xz
% mv node-v22.0.0-nightly2024041887abd023aa-linux-x64 ~/.nodes/22

次に、そのnode実装を利用したいディレクトリで.mise.tomlを作成する:

[tools]

node = ['path:/home/windymelt/.nodes/22']

node =に続いて、配列の中に'path:パス'の形でインストール先を指定する。このとき、相対パスではなく絶対パスを使うのが重要なポイント。現時点では相対パスを使うと動作しない(これがわからずにDiscordに相談に行くはめになった)。

あとはmise reshimすると動作するはず。場合によってはmise trustする必要があるかも。

% mise reshim
% node -v
v22.0.0-nightly2024041887abd023aa

やったー。

自分の環境ではasdf-nodejsを内部的に使う設定にしていたけど、そのままのmiseでもたぶん動作すると思う。

mise.jdx.dev

If you want to use asdf-nodejs then run mise plugins install node https://github.com/asdf-vm/asdf-nodejs

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?