プロジェクト間の切り替え
Volta の主要な利点の一つは、異なるプロジェクトでの異なるツールバージョンをシームレスに処理することです。このページでは、プロジェクト間を移動する際に Volta がどのように自動的に JavaScript 環境を管理するかを説明します。
自動バージョン切り替え
手動でツールバージョン間を切り替える必要がある他のバージョンマネージャーとは異なり、Volta は現在のディレクトリに基づいて自動的にこれを処理します。
動作原理
- JavaScript コマンド(
node
、npm
、パッケージバイナリなど)を実行すると、Volta のシムがコマンドをインターセプト - Volta は現在のディレクトリをチェックし、固定されたツールバージョンを持つプロジェクト内にいるかを確認
- そうである場合、Volta はそのプロジェクトの
package.json
内の固定バージョンを使用 - 固定バージョンを持つプロジェクト内にいない場合、Volta はデフォルトツールを使用
これらはすべて透明に行われ、追加のコマンドは不要です。
ワークフロー例
異なる Node.js 要件を持つ2つのプロジェクトがあると想像してください:
プロジェクト A(~/projects/project-a/package.json
):
json
{
"volta": {
"node": "14.19.1",
"npm": "6.14.16"
}
}
プロジェクト B(~/projects/project-b/package.json
):
json
{
"volta": {
"node": "16.14.2",
"npm": "8.5.0"
}
}
ワークフローは以下のようになります:
bash
# プロジェクト A 内
cd ~/projects/project-a
node --version # v14.19.1 を表示
npm --version # v6.14.16 を表示
# プロジェクト B に切り替え
cd ~/projects/project-b
node --version # 自動的に v16.14.2 を表示
npm --version # 自動的に v8.5.0 を表示
# どのプロジェクト外でも
cd ~
node --version # デフォルト Node バージョンを表示
ネストされたプロジェクト
ネストされたプロジェクトがある場合、Volta は volta
セクションを持つ最も近い package.json
からツールバージョンを使用します。
例:
/parent-project/package.json(volta セクション有り、node@14)
/parent-project/child-project/package.json(volta セクション有り、node@16)
/parent-project/other-directory/(package.json なし)
以下の場所でコマンドを実行すると:
/parent-project/child-project/
- Volta は Node.js 16 を使用/parent-project/other-directory/
- Volta は Node.js 14 を使用/parent-project/
- Volta は Node.js 14 を使用
パッケージバイナリ
Volta の自動切り替えはパッケージバイナリにも適用されます。例えば、プロジェクト固有バージョンの TypeScript があり、tsc
を実行すると、Volta は正しいバージョンが使用されることを保証します。
グローバル vs. ローカルパッケージ
パッケージバイナリを実行する際:
- バイナリがプロジェクトの
node_modules/.bin/
に存在する場合、Volta はそのバージョンを使用 - 存在しないが、パッケージが Volta 経由でグローバルインストールされている場合、そのバージョンを使用
- そうでなければ、コマンドが見つからないエラーを表示
トラブルシューティング
バージョン切り替えで問題が発生した場合:
- プロジェクトの
package.json
にvolta
セクションがあることを確認 volta list all
を実行してインストール済みツールをチェック- 必要なツールがプロジェクトに固定されているか、デフォルトバージョンとしてインストールされているかを確認
volta which node
を実行して Volta がどのバージョンの Node.js を使用しているか、その理由を確認