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

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

Установите готовый пакет, если вам не нужно собирать продукт из исходников. См. Установщики.

Только Community Build

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

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

Установите эти инструменты до сборки.

ИнструментПримечания
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.

Добавьте GOBIN или GOPATH\bin в PATH. Сборка должна находить инструменты, которые go install записывает в эту папку.

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

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

nvm/
├── bin/ # создаётся сборкой
├── .dist/ # установщик + staged-артефакт sync для release
├── build/ # скрипты Community Build
├── 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) можно использовать бесплатно. sync.exe не собирается из публичных исходников. sync.exe не входит в основные операции nvm. sync.exe управляет путём обновления и обслуживания для Community Builds и Certified Builds. Этот путь использует URL сервисов Author. Своя сборка должна предоставить свою программу обновления и обслуживания.

В каждом community-релизе GitHub два файла на архитектуру:

  • 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. Этот релиз уже должен существовать. Рабочий процесс community-релиза загружает *-setup.exe и *-sync.exe при публикации.

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

Соберите один компонент:

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

Maintainer / CI​

Если вы можете читать закрытый submodule sync, не передавайте -DownloadSync. Скрипт тогда собирает sync из исходников.

.\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Целевой процессор. Не передавайте параметр, чтобы определить его автоматически.
-ComponentAll (по умолчанию), Cli, Shims, SyncЧто собирать. Установщик требует All.
-DownloadSyncswitchЗагрузить *-sync.exe из релиза. Не собирать закрытые исходники sync.
-SyncReleaseTagtagЗаменить тег релиза. По умолчанию v плюс версия из манифеста CLI.
-SyncReleaseRepoowner/repoЗаменить репозиторий загрузки. По умолчанию nvm-windows/nvm.
-SkipInstallerswitchПропустить setup EXE. Используйте только с -Component All.
-BinRootpathЗаменить каталог вывода бинарников.

Код выхода 0 означает успех. Ненулевой код выхода останавливает скрипт на первом неудачном шаге.

Результат​

Сборка записывает эти файлы.

АртефактПуть
CLIbin\nvm.exe
Node shimbin\.shim\node.exe
Утилитыbin\utils\proxy.exe, reshim.exe, sync.exe
Установщик.dist\nvm-<version>-<arch>-setup.exe
Staged-артефакт sync.dist\nvm-<version>-<arch>-sync.exe

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

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

Запустите setup EXE как обычный пользователь. Не запускайте его от имени администратора с повышением прав. Следуйте правилам установщика Community Build.

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

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

nvm install lts

Чтобы позже удалить локальную сборку, следуйте Удалению.

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

Передайте -SkipInstaller, чтобы запускать bin\nvm.exe из своей структуры во время разработки. Рабочая установка использует пакет Inno Setup. Этот пакет регистрирует PATH, настройки, обработчики протокола и данные удаления.

Компоненты​

У каждого компонента одна роль.

КомпонентЯзыкПубличные исходники?Роль
cliGo✓nvm.exe. Установка, use, list, config и cache.
shimZig✓Shim node.exe, proxy.exe и reshim.exe. См. режимы работы.
syncGo—Фоновый помощник обновления и doctor (sync.exe). Используйте -DownloadSync или исходники maintainer.
installerInno Setup✓Setup EXE Community Build для пользователя.

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

Используйте эту таблицу, когда сборка завершается с ошибкой.

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

Шаги CI и релиза Community Build описаны в build/README.md.

См. также​

ТемаДокумент
Готовые установщикиУстановщики
Community Build и Certified BuildВыбор сборки
УдалениеУдаление
Режим shim и linkРежимы работы