Режимы работы
NVM for Windows работает в одном из двух режимов: link или shim. Эти режимы определяют, как выполняются Node.js, менеджеры зависимостей и глобальные модули. Режим работы можно переключить в любой момент.
# Быстрый доступ
nvm use shim
nvm use link
# Также доступно в конфигурации nvm
nvm cfg set mode=shim
nvm cfg set mode=link
Link Mode
В этом режиме используются ссылки для определения активной системной версии node.exe. Ссылка входит в PATH. При выполнении nvm use меняется цель пути ссылки, а не сам путь. PATH не меняется.
Режим link максимально приближен к запуску node.exe «как поставляется» с nodejs.org. Задержка нулевая, но продвинутые возможности современного рабочего процесса из режима Shim недоступны.
В версии 2.0.0 добавлена стратегия создания ссылок с «запасным» вариантом.
Режим link использует NTFS junction, чтобы выбрать версию Node.js. NTFS junction не требует особой привилегии. NTFS junction не поддерживает UNC-путь (сетевой ресурс или подключенный диск).
Если хранилище Node.js использует UNC-путь, NVM for Windows создаёт символическую ссылку.
Windows требует привилегию SeCreateSymbolicLinkPrivilege, чтобы создать эту символическую ссылку.
SeCreateSymbolicLinkPrivilege- У пользователя с правами администратора эта привилегия есть.
- Windows выдаёт эту привилегию, когда вы включаете режим разработчика Windows.
- Эту привилегию также можно выдать групповой политикой:
Конфигурация компьютера → Параметры Windows → Параметры безопасности → Локальные политики → Назначение прав пользователя → Создание символьных ссылок.
NVM for Windows v2 не пытается повысить права (то есть не показывает запрос UAC) при неудачном создании symlink. Если права блокируют создание ссылки, пользователь получает нативное уведомление на рабочем столе с подсказками.
Shim Mode (default)
Режим shim даёт новый, упрощённый опыт разработчика. По сравнению с Link Mode он избегает редких требований к правам, но добавляет небольшую задержку (~25–35 мс суммарно). Для большинства сценариев эта задержка незаметна. Поэтому режим Shim рекомендуется большинству пользователей.
Большинство пользователей не заметят влияния задержки shim, поэтому режим shim рекомендуется большинству.
Возможности режима shim:
- Автовыбор закреплённых версий через
.nvmrc,.node-version,package.jsonили другие пользовательские файлы конфигурации runtime. - Автоустановка отсутствующих версий при
nvm use. (Опционально) - Единая обработка несовпадений менеджеров пакетов.
- Ограничение прав Node.js/V8. (Опционально) Требует Certified Builds с дополнением Governance.
- Доверие издателю: проверка издателя node.exe, чтобы предотвратить подмену недоверенным node.exe.
- Нативное журналирование событий.
- Единые/настраиваемые периоды cooldown для всех основных менеджеров пакетов (npm/npx/yarn/pnpm/vlt/bun). Community Builds по умолчанию выключены. Certified Builds по умолчанию 2 дня. Пользователи могут менять любое значение. Принудительная установка из машинной политики требует дополнение Governance.
Ограничение прав V8 / permission lockdown в shim (EnforcePermissionModel, FreezeV8GlobalObjects, DisableEvalAndStringExecution) — функция Governance. Cooldown менеджеров пакетов — нет. Governance может принудительно задать cooldown из машинной политики. См. политику реестра и Выбор сборки.
В Windows действует «универсальный налог на задержку». Любой исполняемый файл запускается через CreateProcessW. Налог платится при запуске shim и снова, когда shim запускает node.exe. В среднем CreateProcessW занимает 15 мс. Shim добавляет 1–3 мс на определение нужной версии Node.js и безопасную передачу команды.
15ms (shim CreateProcessW) + 3ms (логика shim) + 15ms (node.exe CreateProcessW) = 33ms
Сравнение
| Link | Shim | |
|---|---|---|
| Задержка1 | 0ms | 25–35ms |
| Системная версия | ✔️ | ✔️ |
Автоматическая установка (nvm use --install) | ✔️ | ✔️ |
| Автоопределение версии | ❌ | ✔️ |
| Автоустановка отсутствующей обнаруженной версии | ❌ | ✔️ |
Одноразовое переопределение версии (--nvm-use) | ❌ | ✔️ |
| Шим менеджеров пакетов | ❌ | ✔️ |
| Шим глобальных модулей | ❌ | ✔️ |
Проверка издателя node.exe при каждом запуске | ❌ | ✔️ |
| Защита от вредоносных пакетов | ❌ | ✔️ |
| Межсетевой экран модулей и доверия | ❌ | ✔️ |
| Обработка несовпадения менеджеров пакетов | ❌ | ✔️ |
| Ограничение прав Node.js / V8 | ❌ | ✔️ Governance |
| Cooldown менеджеров пакетов | ❌ | ✔️ |
| Журналирование каждого запуска | ❌ | ✔️ |
| Особые права | SeCreateSymbolicLinkPrivilegeдля symlink на UNC path | Нет |