Окружение
Команда vp env управляет всей средой JavaScript: одной средой выполнения Node.js и одним выбранным менеджером пакетов. npm, pnpm, Yarn и Bun являются семействами взаимозаменяемых менеджеров пакетов. Она относится к глобальному CLI и не входит в локальный пакет vite-plus проекта.
Обзор
Представляйте окружение проекта как два компонента, выбираемых независимо друг от друга:
- Node.js — рантайм, используемый для выполнения JavaScript-инструментов и скриптов. Каждый проект может указать необходимую ему версию Node.js.
- Менеджер пакетов устанавливает зависимости проекта и управляет ими. Каждый проект может выбрать npm, pnpm, Yarn или Bun и указать его версию.
Например, проект может использовать Node.js 24 и pnpm 10. Изменение версии Node.js не меняет выбранный менеджер пакетов, а переключение с pnpm на Yarn не меняет версию Node.js. Vite+ определяет оба компонента при запуске команды, поэтому можно переключаться между проектами без необходимости вручную менять используемые инструменты.
Vite+ связывает эти настройки с вашей оболочкой через шимы — небольшие запускающие программы с именами node, npm, pnpm, yarn и bun, а также их алиасы. В управляемом режиме шим определяет и запускает соответствующий инструмент для текущего проекта. Такие команды, как vp install, используют выбранный проектом менеджер пакетов; прямой вызов pnpm всегда запускает pnpm, даже в проекте, который выбрал другой менеджер.
Управляемый режим включён по умолчанию, поэтому Node.js и настроенные shim-команды менеджеров пакетов разрешаются через Vite+ и выбирают подходящие версии для текущего проекта. При установке с нуля после включения управления средой установщики фиксируют управляемый режим для npm, pnpm, Yarn и Bun.
Используйте vp env off, чтобы отключить управляемый режим для Node.js и менеджеров пакетов. Подробнее о режимах окружения и о том, как переключиться на системные инструменты, см. ниже в разделе Режимы окружения.
Если селектор не указан, большинство команд работают с обоими компонентами. Добавьте node, pm, npm, pnpm, yarn или bun, чтобы ограничить область действия команды. pm означает все четыре семейства при выполнении команд просмотра списка и очистки, но при операциях над проектом обозначает единственный выбранный менеджер пакетов.
Версии без указания компонента по-прежнему считаются версиями Node.js для обеспечения совместимости:
vp env pin 22.0.0 # Только Node.js
vp env pin pnpm@10.18.0 # Только pnpm
vp env pin node@24 pnpm@12 # Оба компонента
vp env pin 22.0.0 pnpm@10.18.0 # Также оба компонентаИспользуйте vp env pin, чтобы сохранить версии проекта, vp env default — чтобы задать резервные версии, а vp env use — чтобы переопределить версии для текущей оболочки. Выполните vp env current, чтобы увидеть определённое окружение.
Выбор версии Node.js
Чтобы определить версию Node.js для проекта, Vite+ сначала проверяет текущий каталог, а затем поднимается по дереву его родительских каталогов. Используется ближайший каталог с поддерживаемым объявлением. Внутри каждого каталога источники проверяются в следующем порядке:
- Файл
.node-version devEngines.runtimeвpackage.json(согласно стандарту devEngines)engines.nodeвpackage.json- Файл
.nvmrc
Если ни в одном каталоге не указана версия, Vite+ использует глобальную версию по умолчанию (vp env default), а затем — последнюю LTS-версию.
devEngines.runtime имеет более высокий приоритет, чем engines.node, поскольку определяет требования к среде разработки, тогда как engines.node описывает диапазон версий, поддерживаемых для пользователей пакета. Если указанные источники противоречат друг другу, vp env doctor выведет предупреждение.
Использование pnpm с управлением средой выполнения в Vite+
pnpm также может управлять средой выполнения, объявленной в devEngines.runtime. Если Node.js одновременно управляется pnpm и Vite+, они могут отдельно загрузить одну и ту же версию или выбрать разные версии, что приведёт к непредсказуемому поведению разных команд.
Если вы хотите, чтобы Vite+ управлял Node.js, начиная с pnpm 11 можно глобально отключить автоматическое управление средой выполнения pnpm с помощью runtimeOnFail:
pnpm config set --global runtimeOnFail ignoreЭтот параметр также отключает автоматическое управление другими объявленными средами выполнения, включая Bun и Deno. Прежде чем устанавливать его глобально, убедитесь, что ни один из ваших проектов не зависит от такого поведения.
Выбор менеджера пакетов
При выборе менеджера пакетов используется следующий приоритет:
- Явно заданное переопределение в команде
VP_PACKAGE_MANAGERpackageManagerверхнего уровняdevEngines.packageManager- Lock-файл или конфигурация конкретного менеджера
- Глобальная версия по умолчанию для указанного менеджера пакетов
- Последняя доступная версия указанной shim-команды
VP_PACKAGE_MANAGER выбирает менеджер пакетов и его версию для таких команд, как vp install. Шимы менеджеров пакетов, вызываемые напрямую, игнорируют эту переменную и используют независимые переопределения версий:
| Переменная | Шимы |
|---|---|
VP_NPM_VERSION | npm, npx |
VP_PNPM_VERSION | pnpm, pnpx |
VP_YARN_VERSION | yarn, yarnpkg |
VP_BUN_VERSION | bun, bunx |
Эти переменные принимают версию или диапазон версий, например 10.18.0, 10 или latest, и переопределяют версии проекта и версии по умолчанию соответствующего шима. Они не изменяют менеджер или версию, выбранные командой vp install.
vp env use pnpm@10.20.0 устанавливает VP_PNPM_VERSION для текущей оболочки, так же как vp env use node@22 устанавливает VP_NODE_VERSION. У каждого менеджера пакетов есть собственное переопределение, поэтому переключение на Yarn не сбрасывает переопределение для pnpm. vp env use не устанавливает и не очищает VP_PACKAGE_MANAGER.
Прямые шимы определяют свою версию из соответствующей переменной окружения, затем из соответствующего файла сессии, если оболочка-обёртка недоступна, затем из конфигурации проекта и значения по умолчанию для семейства. vp env current pnpm и vp env which pnpm позволяют проверить выбор версии этого шима; vp env current pm сообщает о менеджере, выбранном для команд vp.
VP_PACKAGE_MANAGER=pnpm@10.18.0 vp install
VP_PNPM_VERSION=10.20.0 pnpm --versionПереопределения применяются в управляемом режиме. Менеджер пакетов также может самостоятельно переключить свою версию после того, как Vite+ запустит его; например, настройка managePackageManagerVersions в pnpm может переключить его обратно на версию, указанную в package.json.
Выбор проекта применяется только к соответствующим ему шимам. Например, pnpm управляет pnpm и pnpx; при вызове npm его версия по-прежнему определяется независимо. Если подходящего выбора проекта нет, именованный шим использует настроенную версию по умолчанию, а при её отсутствии — последнюю доступную версию без запроса подтверждения. Напрямую вызываемый шим npm сохраняет свой резервный вариант, поставляемый вместе с Node, тогда как явное указание области семейства vp env ... npm использует последнюю версию отдельно устанавливаемого npm.
Кэширование последней версии
Когда именованный шим переключается на последнюю доступную версию, определённая версия кэшируется на один час. После истечения срока действия кэш остаётся доступным, если до реестра не удаётся достучаться.
Режимы окружения
Управляемый режим включён по умолчанию, поэтому Node.js и настроенные шимы менеджеров пакетов определяют версии через Vite+ и выбирают подходящие версии для текущего проекта. После включения пользователем управления окружением новые установщики включают управляемый режим для npm, pnpm, Yarn и Bun.
Чтобы включить управляемый режим, выполните:
vp env onЭто включает управляемый режим для обоих компонентов. Их режимы также можно изменять независимо друг от друга, в том числе для одного семейства менеджеров пакетов:
vp env on node
vp env off pm
vp env off pnpm
vp env on bunЕсли вы не хотите, чтобы Vite+ в первую очередь управлял Node.js, выполните:
vp env offЭто переключает оба компонента в режим с приоритетом системных инструментов. Vite+ предпочитает системные инструменты, а при их отсутствии использует управляемые установки. Смешанные конфигурации работают совместно: системная shim-команда менеджера пакетов получает версию Node.js, выбранную режимом Node.js.
Использование pm задаёт выбранный режим для всех поддерживаемых в настоящее время менеджеров пакетов и заменяет их индивидуальные настройки. Непривязанные к конкретному компоненту команды on или off делают то же самое, одновременно изменяя режим Node.js. Для семейства, режим которого ещё не задан, выбор остаётся неопределённым до первого использования его shim-команды или выполнения команды on / off, которая задаёт этот режим.
Команды
Настройка
vp env setupсоздаёт или обновляет shim-файлыnode,npm,npx,pnpm,pnpx,yarn,yarnpkg,bun,bunx,vpxиvprв определённом каталоге bin. Он записывает скрипты настройки оболочки в каталог конфигурации.vp env on/vp env offизменяет оба режима; добавьтеnode,pm,npm,pnpm,yarnилиbun, чтобы ограничить область измененияvp env printвыводит настройки PATH для обоих компонентов; добавьте селектор, чтобы вывести настройки только для одного компонента
В PowerShell необходимо выполнить dot-source для сгенерированного сценария настройки в текущей оболочке, прежде чем vp env use сможет влиять только на текущую сессию оболочки:
. "$env:APPDATA\vite-plus\env.ps1"Если в старой установке Vite+ используется %USERPROFILE%\.vite-plus, вместо этого загрузите файл env.ps1 из этого каталога.
Добавьте эту строку в конец вашего PowerShell-профиля $PROFILE, чтобы она автоматически применялась в новых сессиях оболочки. Для этого не требуются повышенные привилегии.
Создайте файл профиля, если он ещё не существует:
if (-not (Test-Path $PROFILE)) { New-Item $PROFILE -Force }Откройте файл профиля для редактирования:
Invoke-Item $PROFILEКомандная строка Windows (cmd.exe) не может определить функцию-обёртку, необходимую для того, чтобы vp env use мог обновить текущий сеанс оболочки. Вместо этого используйте сгенерированную команду vp-use.cmd:
vp-use 20
node --version
vp-use --unsetЭта альтернативная команда требуется только для vp env use. Остальные команды vp env работают в командной строке Windows без каких-либо изменений. Команда vp env setup создаёт vp-use.cmd в директории bin в Windows.
В CI vp env use может выполняться без инициализации оболочки. Команда записывает временный файл сессии для каждого рантайма или менеджера пакетов в определённый каталог состояния, например .session-node-version или .session-pnpm-version. Последующие вызовы шимов в рамках той же задачи используют эти файлы для определения той же среды.
Управление
vp env defaultпоказывает глобальную версию Node.js по умолчанию и версию каждого настроенного менеджера пакетов. Версии без указания компонента задают версию Node.js; спецификации с указанием менеджера, такие какpnpm@10.18.0, задают версию по умолчанию для shim-команды этого менеджера, не изменяя версии по умолчанию для Bun, Yarn или npm.--unsetудаляет все значения по умолчанию, если не указан селектор.vp env pinпоказывает или записывает закреплённые версии проекта. Существующие файлы.node-versionи поляpackageManagerверхнего уровня продолжают обновляться для обеспечения совместимости. Существующий.nvmrcобновляется, если он является фактическим источником версии Node в текущем каталоге; его комментарии и другое содержимое, не относящееся к версии, сохраняются. В противном случае Vite+ записывает соответствующую записьdevEngines. Используйте--target node-version,--target nvmrc,--target dev-enginesили--target package-manager, чтобы явно выбрать целевой источник. Закрепление версии во вложенном каталоге не изменяет унаследованный.nvmrc.vp env unpinпо умолчанию удаляет обе действующие фиксации; добавьте селектор, чтобы удалить только одну из них. Объявления с более низким приоритетом не удаляются.vp env useактивирует всю среду проекта. Явно указанные спецификации переопределяют выбранные компоненты;--unsetудаляет настройки обоих компонентов, если не указан селектор.vp env installустанавливает всю определённую среду, выбранный компонент или явно указанные спецификации.vp env uninstallудаляет явно указанные точные версии Node.js или версии менеджеров пакетов с указанием версии.vp env cleanудаляет неиспользуемые установки. Используйтеclean node,clean pmили укажите конкретный менеджер. Текущие версии и настроенные версии по умолчанию сохраняются.vp env execзапускает команду в определённой среде. Используйте--nodeи--package-manager;--npmявляется псевдонимом для--package-manager npm@….vp nodeиспользует определённую среду выполнения Node.js и предоставляет дочерним процессам путь к выбранному менеджеру пакетов.
Проверка
vp env currentпоказывает текущее разрешённое окружениеvp env doctorвыполняет диагностику окруженияvp env whichпоказывает, какой путь к инструменту будет использованvp env listпоказывает отдельные разделы для Node.js, npm, pnpm, Yarn и Bun; селекторы ограничивают выводvp env list-remoteодновременно получает данные из реестров Node.js и всех четырёх менеджеров пакетов; селекторы ограничивают сетевые запросы.--ltsнеявно выбирает Node.js.
Настройка проекта
- Закрепите версию проекта с помощью
vp env pin - Используйте
vp install,vp devиvp buildкак обычно - Позвольте Vite+ автоматически выбрать подходящую среду выполнения для проекта
Примеры
# Настройка
vp env setup # Создать shim-команды для Node.js и менеджеров пакетов
vp env on # Управление Node.js и менеджерами пакетов
vp env off pm # Использовать только системные менеджеры пакетов
vp env off pnpm # Использовать только системный pnpm
vp env print # Вывести настройки PATH для обоих компонентов
# Управление
vp env pin lts pnpm@10 # Зафиксировать точные версии обоих компонентов проекта
vp env install # Установить всю определённую среду
vp env default node@24 # Задать глобальную версию Node.js по умолчанию
vp env default pnpm@10 # Задать глобальную версию pnpm по умолчанию
vp env use 20 pnpm@10 # Переопределить оба компонента для текущей оболочки
vp env use --unset pnpm # Удалить только сессионную версию pnpm
vp env use --unset pm # Удалить все сессионные версии менеджеров пакетов
vp env clean # Удалить неиспользуемые управляемые версии Node.js и менеджеров пакетов
# Проверка
vp env current # Показать текущее разрешённое окружение
vp env current --json # Вывести данные в формате JSON для автоматизации
vp env which node # Показать, какой исполняемый файл node будет использован
vp env which npx # Показать закреплённый алиас менеджера пакетов, если packageManager совпадает
vp env list # Показать все локально установленные компоненты
vp env list node # Показать только установки Node.js
vp env list-remote --lts # Показать только версии Node.js с долгосрочной поддержкой (LTS)
# Выполнение
vp env exec --node lts --package-manager pnpm@10 pnpm install
vp env exec node -v # Использовать режим shim-команд с автоматическим выбором версии
vp node script.js # Сокращение: запустить сценарий Node.js с разрешённой версией
vp node -e "console.log(1+1)" # Сокращение: передать любой флаг или аргумент nodeВывод JSON
Вывод JSON для current, list и list-remote организован по компонентам. current --json возвращает соседние объекты node и package_manager:
{
"node": {
"version": "22.0.0",
"source": "devEngines.runtime",
"source_path": "/project/package.json",
"project_root": "/project",
"bin_path": "/home/.vite-plus/js_runtime/node/22.0.0/bin/node",
"installed": true,
"mode": "managed"
},
"package_manager": {
"name": "pnpm",
"version": "10.18.0",
"source": "packageManager",
"source_path": "/project/package.json",
"project_root": "/project",
"bin_paths": {
"pnpm": "/home/.vite-plus/package_manager/pnpm/10.18.0/pnpm/bin/pnpm",
"pnpx": "/home/.vite-plus/package_manager/pnpm/10.18.0/pnpm/bin/pnpx"
},
"installed": true,
"mode": "managed"
}
}list --json и list-remote --json группируют массивы компонентов:
{
"node": [],
"package_managers": {
"npm": [],
"pnpm": [],
"yarn": [],
"bun": []
}
}Селекторы исключают невыбранные поля верхнего уровня или семейства менеджеров пакетов. Вывод данных из реестров работает по принципу «всё или ошибка»: если не удаётся выполнить запрос к любому выбранному реестру, Vite+ не выводит частичный результат ни в обычном, ни в JSON-формате.
Пользовательское зеркало Node.js
По умолчанию Vite+ загружает Node.js с https://nodejs.org/dist. Если вы работаете за корпоративным прокси или вам необходимо использовать внутреннее зеркало (например, Artifactory), задайте переменную окружения VP_NODE_DIST_MIRROR:
# Устанавливаем конкретную версию из пользовательского зеркала
VP_NODE_DIST_MIRROR=https://my-mirror.example.com/nodejs/dist vp env install 22
# Устанавливаем глобальную версию по умолчанию, используя пользовательское зеркало
VP_NODE_DIST_MIRROR=https://my-mirror.example.com/nodejs/dist vp env default lts
# Задаём постоянное значение в профиле оболочки (.bashrc, .zshrc и т. д.)
echo 'export VP_NODE_DIST_MIRROR=https://my-mirror.example.com/nodejs/dist' >> ~/.zshrcПроверка цифровой подписи Node.js
При установке Node.js из официального дистрибутива nodejs.org Vite+ загружает PGP-подписанный файл SHASUMS256.txt.asc и проверяет его подпись с помощью встроенного набора открытых ключей разработчиков Node.js, прежде чем доверять каким-либо контрольным суммам. Это защищает от подмены файла SHASUMS256.txt вместе с соответствующим вредоносным архивом. После этого всегда выполняется проверка SHA-256 контрольной суммы загруженного архива.
При использовании пользовательских зеркал (VP_NODE_DIST_MIRROR), публикующих только обычный файл SHASUMS256.txt, Vite+ использует только проверку контрольной суммы. Если зеркало публикует и файл .asc, его подпись также проверяется, а недействительная подпись считается критической ошибкой.
Если в будущем проблемы с набором ключей или сертификатами помешают загрузке, можно установить переменную VP_NODE_SKIP_SIGNATURE_VERIFY, чтобы временно отключить проверку PGP-подписи. Проверка SHA-256 контрольной суммы при этом всё равно выполняется, а Vite+ выводит предупреждение о том, что проверка подписи была пропущена:
VP_NODE_SKIP_SIGNATURE_VERIFY=1 vp env install 22