Skip to content

Переключение между проектами

Одно из главных преимуществ Volta - это бесшовная обработка различных версий инструментов в разных проектах. Эта страница объясняет, как Volta автоматически управляет вашей JavaScript средой при переходе между проектами.

Автоматическое переключение версий

В отличие от других менеджеров версий, которые требуют ручного переключения между версиями инструментов, Volta автоматически обрабатывает это на основе вашей текущей директории.

Как это работает

  1. Когда вы запускаете JavaScript команду (например, node, npm или исполняемый файл пакета), прокладка Volta перехватывает команду
  2. Volta проверяет вашу текущую директорию, чтобы увидеть, находитесь ли вы в проекте с закреплёнными версиями инструментов
  3. Если да, Volta использует закреплённые версии из package.json этого проекта
  4. Если вы не в проекте с закреплёнными версиями, Volta использует ваши инструменты по умолчанию

Всё это происходит прозрачно, без каких-либо дополнительных команд.

Пример рабочего процесса

Представьте, что у вас есть два проекта с разными требованиями к Node.js:

Проект 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 будет использовать версии инструментов из ближайшего package.json с секцией volta.

Например:

/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. локальные пакеты

Когда вы запускаете исполняемый файл пакета:

  1. Если исполняемый файл существует в node_modules/.bin/ проекта, Volta использует эту версию
  2. Если нет, но пакет установлен глобально через Volta, она использует эту версию
  3. Иначе показывается ошибка о том, что команда не найдена

Устранение неполадок

Если у вас возникают проблемы с переключением версий:

  • Убедитесь, что ваш проект имеет секцию volta в своём package.json
  • Запустите volta list all, чтобы проверить установленные инструменты
  • Проверьте, закреплены ли нужные инструменты за вашим проектом или установлены как версии по умолчанию
  • Запустите volta which node, чтобы увидеть, какую версию Node.js использует Volta и почему