node (shim)
В режиме shim команда node в PATH — это Zig-shim NVM for Windows (node.exe), а не бинарник OpenJS Node.js. Shim определяет, какую установленную версию Node.js запустить, затем запускает соответствующий node.exe.
Переключение режимов: nvm use shim / nvm use link. Контекст: Режимы работы.
Что делает shim
- Разбирает флаги только для shim (ниже) и убирает их перед передачей дальше.
- Разрешает версию Node.js (активное preference, файлы обнаружения,
--nvm-use, алиасы). - При настройке может автоматически установить отсутствующую версию.
- Проверяет целостность самого shim, если запуск из каталога
.shimв data-root. - Проверяет целевой
node.exe(verify-cache / Authenticode) перед spawn. - Запускает настоящий Node.js через
CreateProcessWс оставшимися аргументами.
Флаги shim
Эти флаги обрабатывает shim и не передаёт в Node.js. Их можно ставить в любом месте командной строки.
| Флаг | Назначение |
|---|---|
--nvm-use <version> | Один запуск с указанной версией Node.js (не меняет версию по умолчанию). |
--nvm-use=<version> | То же, что --nvm-use <version>. |
--nvm-which | Печатает, как разрешена версия (source, requested, effective, путь), затем продолжает. |
--nvm-shim-version | Печатает версию исполняемого файла shim и завершается. |
node --version
node --nvm-which --version
node --nvm-use 22 script.js
node --nvm-use=22 script.js
node --nvm-shim-version
Пример строки --nvm-which:
nvm version resolution: source=system_default requested=24.16.0 effective=24.16.0 resolved=24.16.0 node=C:\Users\...\node.exe
Разрешение версии
Без --nvm-use shim использует файлы проекта при включённом auto_use, затем версию по умолчанию. Диапазон вроде engines.node >=8.9 не переключает на новейший установленный Node.js, если версия по умолчанию уже подходит. См. Разрешение версий.
--nvm-which печатает источник этого решения. --nvm-use — только подмена на один запуск. Флага --nvm-use-which нет.
Обнаружение и автоустановка настраиваются (auto_detect, auto_use, auto_install, auto_install_prompt). См. Базовая конфигурация.
Проверки целостности
| Проверка | Когда | Поведение |
|---|---|---|
| Self-check shim | Запуск из {DataRoot}/.shim/node.exe | Побайтовое сравнение с каноническим shim в program-root. Несовпадение → shim integrity check failed, код 1. |
Доверие к node.exe | Перед каждым spawn | Предпочтительно hit в подписанном verify-cache (~1–2 мс). Miss/invalid → полный Authenticode, затем PE FileVersion против папки. Отказ Authenticode → NVM4301. Несовпадение FileVersion → NVM4314. Certified version firewall → NVM4411. |
Если ключ или записи verify-cache отсутствуют, shim откатывается к полному Authenticode (медленнее, но безопасно). nvm doctor показывает состояние verify-cache.
Задержка
Shim добавляет примерно 1–3 мс на разрешение. Windows всё равно платит CreateProcessW дважды (shim, затем Node). Типичный суммарный overhead ~25–35 мс против link mode. Подробнее: Режимы работы.
См. также
- Package Manager Shims —
proxy.exeдля npm/npx/yarn/pnpm - Global Module Shims — hardlink
proxy.exeдля глобальных CLI nvm use shim- Коды ошибок — NVM4301, NVM4314, NVM4411 и связанные коды безопасности