概要
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 typescript
This 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つ見つけて貢献できたし結構良かった。使っていきたい。