Перейти к основному содержимому

Сборка из исходников

Большинству пользователей достаточно готового пакета — см. Установщики.

Только Community Build

Это руководство по открытому/неподписанному пайплайну Inno Setup. Certified-сборки (подписанные MSI/Intune, ADMX, SBOM и т.д.) собираются закрытыми инструментами и будут доступны в клиентском портале с сентября 2026.

Предварительные требования​

ИнструментПримечания
Windows 10/11 (amd64 или arm64)На хосте можно кросс-собирать другую архитектуру через -Architecture.
GoВерсия в cli/src/go.mod (сейчас 1.26.2).
qgoОбёртка сборки Go для CLI (qgo в PATH).
ZigТочная версия в shim/.zigversion (сейчас 0.15.2).
Inno Setup6.7.1+, ISCC.exe в PATH (нужен для setup EXE).
go-winresВстраивание ресурсов Windows. Скрипт сборки ставит через go install, если отсутствует.
GitКлон с submodules.
PowerShellЗапуск .\build\main.ps1 из корня репозитория.
Сеть (для -DownloadSync)Загрузка готового sync.exe с GitHub Release.

Убедитесь, что GOBIN/GOPATH\bin в PATH, чтобы находились утилиты из go install.

Получение исходников​

Публичный community-монорепозиторий связывает CLI, общие библиотеки, shim и установщик через Git submodules:

nvm/
├── bin/ # создаётся сборкой
├── .dist/ # установщик + staged-артефакт sync для release
├── build/ # скрипты community-сборки
├── cli/ # nvm.exe (Go)
├── common/ # общие Go-модули
├── shim/ # node/proxy/reshim (Zig)
└── installer/ # Inno Setup
git clone --recurse-submodules https://github.com/nvm-windows/nvm.git
cd nvm

Если клонировали без submodules:

git submodule update --init --recursive
Закрытый репозиторий sync

sync.exe (doctor и upgrade) свободно доступен, но не собирается из публичных исходников. Не часть основных операций nvm. Управляет путём обновления и обслуживания в community- и certified-сборках, привязанным к URL и сервисам Author. Для кастомных сборок стоит реализовать своё sidecar-приложение обновления/обслуживания.

На community GitHub releases два артефакта на архитектуру:

  • nvm-<version>-<arch>-setup.exe — установщик Inno Setup
  • nvm-<version>-<arch>-sync.exe — готовый sync для сборки из исходников

Передайте -DownloadSync, чтобы .\build\main.ps1 загрузил sync в bin\utils\sync.exe перед упаковкой.

Сборка​

Полная публичная сборка (рекомендуется)​

Собирает CLI + shim, скачивает sync.exe, затем Inno Setup:

.\build\main.ps1 -DownloadSync

.\build.ps1 вызывает тот же скрипт.

Загрузка по тегу v + version из cli/src/manifest.json репозитория nvm-windows/nvm, артефакт nvm-<version>-<arch>-sync.exe. Release должен существовать — community release workflow публикует *-setup.exe и *-sync.exe.

Только компоненты (публичная)​

.\build\main.ps1 -Component Cli
.\build\main.ps1 -Component Shims
.\build\main.ps1 -Component Sync -DownloadSync

Maintainer / CI​

При доступе к закрытому submodule sync можно собрать sync из исходников без -DownloadSync:

.\build\main.ps1

Частые параметры​

# Явная архитектура
.\build\main.ps1 -Architecture amd64 -DownloadSync
.\build\main.ps1 -Architecture arm64 -DownloadSync

# Другой опубликованный release для sync
.\build\main.ps1 -DownloadSync -SyncReleaseTag v2.0.0

# Только бинарники (без Inno Setup)
.\build\main.ps1 -DownloadSync -SkipInstaller

# Свой каталог вывода (по умолчанию .\bin)
.\build\main.ps1 -DownloadSync -BinRoot D:\out\nvm-bin
ПараметрЗначенияНазначение
-Architectureamd64, arm64Целевой CPU. Без параметра — автоопределение.
-ComponentAll (по умолчанию), Cli, Shims, SyncЧто собирать. Installer требует All.
-DownloadSyncswitchСкачать *-sync.exe с release вместо сборки из закрытых исходников.
-SyncReleaseTagtagПереопределить тег release (по умолчанию: v + версия CLI manifest).
-SyncReleaseRepoowner/repoПереопределить репозиторий (по умолчанию: nvm-windows/nvm).
-SkipInstallerswitchПропустить setup EXE (только с -Component All).
-BinRootpathКаталог вывода бинарников.

Код выхода 0 — успех. Иначе остановка на первом сбойном шаге.

Результат​

АртеfactПуть
CLIbin\nvm.exe
Node shimbin\.shim\node.exe
Утилитыbin\utils\proxy.exe, reshim.exe, sync.exe
Installer.dist\nvm-<version>-<arch>-setup.exe
Staged sync.dist\nvm-<version>-<arch>-sync.exe

<version> из cli/src/manifest.json. DLL sync worker не упаковываются — подгружаются с assets.nvm-windows.com при необходимости.

Установка собранного​

Запускайте setup EXE как обычный пользователь (не elevated Administrator), как для community-установщика:

.\.dist\nvm-<version>-<arch>-setup.exe

Затем установите Node.js:

nvm install lts

Удаление локальной сборки — Удаление.

Только бинарники (portable)​

С -SkipInstaller можно запускать bin\nvm.exe из своей структуры для разработки. Для production по-прежнему используйте Inno Setup — PATH, настройки, protocol handlers и метаданные удаления.

Компоненты​

КомпонентЯзыкПубличные исходники?Роль
cliGo✓nvm.exe — install/use/list/config/cache
shimZig✓shim node.exe, proxy.exe, reshim.exe (режимы работы)
syncGo—Фоновый helper update/doctor (sync.exe); -DownloadSync или исходники maintainer
installerInno Setup✓Per-user community setup EXE

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

СимптомЧто проверить
qgo not foundУстановите qgo, добавьте в PATH.
Неверная версия Go/ZigСверьте с cli/src/go.mod и shim/.zigversion.
Нет исходников sync / ошибка сборкиОжидаемо на публичных клонах. -DownloadSync или только -Component Cli / -Component Shims.
-DownloadSync 404Нужен release с nvm-<version>-<arch>-sync.exe. Обновите cli/src/manifest.json или -SyncReleaseTag.
Ошибка installerInno Setup 6.7.1+ (ISCC.exe в PATH). Проверьте version, appUserModelId, appId в cli/src/manifest.json.
Нет go-winresСкрипт пробует go install github.com/tc-hib/go-winres@latest. Добавьте GOPATH\bin в PATH.
Пустой submodulegit submodule update --init --recursive (публично: cli/common/shim; sync закрыт).

CI и release для community — build/README.md.

См. также​

ТемаДокумент
Готовые установщикиУстановщики
Community vs certifiedВыбор редакции
УдалениеУдаление
Shim vs linkРежимы работы