できない.dev

Volta

別名: volta pin / ボルタ

Node.js とパッケージマネージャのバージョンをプロジェクト単位で package.json に固定し、ディレクトリに入るだけで自動的に切り替える JavaScript ツールチェーンマネージャ。

公開:

定義

Volta は Node.js と npm・Yarn・pnpm のバージョンをプロジェクトごとに固定するツールチェーンマネージャである。package.jsonvolta フィールドに書かれたバージョンを読み、そのディレクトリで nodenpm を実行した時点で該当バージョンへ差し替える。

詳細

volta pin node@22 を実行すると package.json に固定バージョンが書き込まれ、リポジトリを共有する全員が同じ Node で動くようになる。
切り替えは PATH 上に置かれた Volta 側の実行ファイルが担うため、シェルの起動スクリプトに手を入れる必要が無く、nvm use に当たる明示的な切り替えコマンドも要らない。
ここが nvm との最大の違いである。

Node 本体を ~/.volta 配下のユーザー領域に置くため、システム所有のディレクトリへ書き込もうとして起きる権限エラーの回避策としても使える。
グローバルに入れたコマンドラインツールは、インストール時点の Node に紐づけて保存される。

よくある誤解

  • nvm と併用できる: どちらも PATH の先頭に自分の実行ファイルを置く方式なので、両方入れると先に来た方が勝ち、意図しないバージョンで動くことがある。
  • engines を満たしてくれる: package.jsonengines は要求の宣言に過ぎず、Volta の volta フィールドとは別物である。Node.js で engines のバージョン不一致(EBADENGINE)が出るengines 側の話であり、Volta で固定したからといって engines の記述が変わるわけではない。

関連

Corepack は Yarn と pnpm のバージョン固定だけを担う Node.js 同梱の仕組みで、Node 本体は対象外である。
CI 側は actions/setup-nodenode-version-file を使うと、ローカルの固定と揃えやすい。

この記事は役立ちましたか?