LoginSignup
5
2

More than 3 years have passed since last update.

Volta(元Notion)を試した(訂正)

Last updated at Posted at 2019-05-18

概要

Windows版を軽く試した。node のバージョン切り替えができた。プロジェクトごとにツール(tsc とか)のバージョンを固定する機能についてはまた後で試す誤解しており、その機能はプロジェクトの意図するところではない、ということです。参照 Tool does not switch to the project-specific version · Issue #452 · volta-cli/volta

Info

最近 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 系に固定される。

pinnodeyarn に対してできる。その他 tsc 等についてはできない。

package.json
{
  //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.jsondependency とは別にバージョン指定している」と理解していたが、そうではなかった。

参照 Tool does not switch to the project-specific version · Issue #452 · volta-cli/volta

グローバルインストールとの違いを(確認はしていないが)想像してみると、多分 node のバージョンとセットで管理していて (%LocalAppData% のjsonに書かれていた)そこが良いのだろうし、「プロジェクトローカルで指定されてなくて困るのなら指定すべき」ということだろうしで、納得した。

終わりに

node は切り替えられたし、バグを1つ見つけて貢献できたし結構良かった。使っていきたい。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2