概要
Windows版を軽く試した。node のバージョン切り替えができた。プロジェクトごとにツール(tsc とか)のバージョンを固定する機能についてはまた後で試す誤解しており、その機能はプロジェクトの意図するところではない、ということです。参照 Tool does not switch to the project-specific version · Issue #452 · volta-cli/volta
Info
- Volta - The JavaScript Launcher ⚡
- GitHub volta-cli/volta
- RFC volta-cli/rfcs
-
volta/RELEASES.md
まだ変更が多いのでリリースノートを見ると楽
最近 ver.0.5.0 が出てプロジェクト名が変わった。
- Notion から Jetson に名前変更すると思っていたら、いつの間にか Volta になっていた
- 知られたNotionというものが他に存在する(間違ってイシュー報告した人を見たことがある)
- 「ハッスルフリーなJSツールチェインマネージャー」から「JSランチャー」になった
動機
- nodeのバージョンを気軽に切り替えたい
- バージョンアップを手軽にやりたい(CLI で済むなら嬉しい)
- グローバルインストールしたくないがグローバルインストールされていてほしいときがある
Volta が解消してくれそうなので気になっていた。以前ビルドした時はさっぱり動かせなかったが、少し前にWindows版インストーラができたし名前も変わった、ということで試す。
やった
インストール
Windows 版はインストーラがある。
UNIX 版のインストールガイドにある $VOLTA_HOME は Windows でも有効に見えた(ログファイルを作れていた)が、Volta 本体がフォルダ作成に失敗するらしく、環境変数を削除してインストールをやり直した。
C:\Program Files\Volta ((x86)ではない方)に本体がインストールされ、%LocalAppData%\Volta に node 等が保持されていた。
追記
書き忘れたが、C:\Program Files\Volta にある node.exe などを実行すると、シムとの間で相互に実行してプロセス生成し続けるので(見張っててすぐ気づいたから良かったけど)やってはいけない。
node のバージョンを固定
まず volta install node@8 で ver.8 系が使えるようになる。install するとそれがデフォルトになる。
更にプロジェクト内で volta pin node@6 とすればそのプロジェクトでは ver.6 系に固定される。
pin は node と yarn に対してできる。その他 tsc 等についてはできない。
{
//pin するとpackage.jsonに書かれる
"volta": {
"node": "6.17.1"
}
}
先にこれを書いた後で node --version を実行した場合は、node ver.6 ダウンロードが始まった。変なバージョンを書くとエラーになる。
2つのプロジェクトを行き来して node --version を実行すると確かに違っている。volta current でも確認できる。
# 別のところで volta install node@8 したあと ver.6 のプロジェクトに戻ってきた
$ volta current
project: v6.17.1 (active)
user: v8.16.0
REPL でも違いを確認できた。
# ver.6の方
$ node
> const util = require('util');
undefined
> typeof util.promisify; # これは6には存在しない
'undefined'
> .exit
# ver.8の方に移動した
$ node
> const util = require('util');
undefined
> typeof util.promisify;
'function'
> .exit
npm run foo のときも Volta は適切なバージョンを使ってくれるらしいが、今回はそこは見ていない。
(訂正)tsc のバージョンを固定……しない
(注記) コマンドラインで fooTool ... のように実行するときの fooTool のバージョンをプロジェクトごとにセットできる、という前提で書いていたがそうではなかった、ということで訂正し書き直したものです。
Understanding Volta | Voltaに下記のようにあった(将来変わるかもしれない)。
volta install typescriptThis will add the tsc executable to your toolchain, and depending on the project you’re in, this executable will switch to the project’s chosen version of TypeScript:
cd /path/to/project-using-typescript-2.9.2 tsc --version # 2.9.2 cd /path/to/project-using-typescript-3.4.5 tsc --version # 3.4.5
これを「package.json の dependency とは別にバージョン指定している」と理解していたが、そうではなかった。
参照 Tool does not switch to the project-specific version · Issue #452 · volta-cli/volta
グローバルインストールとの違いを(確認はしていないが)想像してみると、多分 node のバージョンとセットで管理していて (%LocalAppData% のjsonに書かれていた)そこが良いのだろうし、「プロジェクトローカルで指定されてなくて困るのなら指定すべき」ということだろうしで、納得した。
終わりに
node は切り替えられたし、バグを1つ見つけて貢献できたし結構良かった。使っていきたい。