Я знаю, что могу выбрать версию узла для использования с NVM, но могу ли я без проблем создать два угловых проекта (с разными версиями ng и версией узла) одновременно? Мой сценарий — это собственный сервер сборки (Windows) с двумя агентами. Каждый из них может одновременно отвечать за создание приложения Angular с другой версией.
С уважением
Конечно, вы можете вместо запуска глобально установленного ng
запустить локальный с помощью npx, как этот npx ng build
, npx будет использовать локально установленную команду @angular/cli ng, которая находится в ./node_modules/.bin/ вашего проекта, npx поставляется с установленным нпм.
Другой вариант — добавить скрипт в package.json:
"scripts": {
"build": "ng build --prod=true --build-optimizer=true --aot=true",
},
И бегите с npm run build
.
Да, лучше всего использовать рекомендуемую версию nodejs/npm для конкретной версии angular, хотя она может работать с той же версией.
Я также рекомендую создавать угловые проекты в контейнерах Docker, таким образом, вы всегда используете одну и ту же среду (ОС, Node.js, NPM,...).
Действительно, Docker был бы лучшим выбором :), но в этом случае мы не можем его использовать. Итак, моя идея состоит в том, чтобы добавить эти три шага в конвейер: 1: nvm use <version> (устанавливает правильную версию узла в соответствии с угловой версией для сборки) 2: npm Install (для загрузки/обновления модулей узла) 3: npm run build ( для запуска скрипта сборки ng, установленного в package.json). Это правильно с вашей точки зрения? Не о чем беспокоиться, когда два конвейера, создающие разные угловые версии, совпадают?
Одна вещь, о которой вам нужно знать, это то, что когда вы вызываете nvm use, он переключает версию во всех открытых консолях, по крайней мере, в соответствии с окнами nvm: «Когда вы запускаете nvm use x.x.x, активная версия узла автоматически обновляется во всех открыть консольные окна. "" Таким образом, если есть конвейер, работающий с узлом 10, и вы вызываете nvm use 12 во втором конвейере, он везде переключится на узел 12, если в первом конвейере есть другая команда узла, вместо этого будет использоваться узел 12. из 10, так что это может вызвать проблемы.
Я предлагаю вам протестировать его и посмотреть, как он работает, также взгляните на вольта.ш, он похож на nvm, но может сработать в вашем случае, согласно документам: «Каждый раз, когда вы устанавливаете инструмент с помощью Volta, он добавляет прокладку к вашему PATH, который действует как интеллектуальный (и быстрый) маршрутизатор для правильной версии инструмента и запускает его с правильным движком Node».
Как заявил @Andrei, невозможно использовать NVM для установки версии Node в начале конвейера, потому что он изменит версию во всех открытых консолях (поэтому, если запущен другой конвейер с другой версией Node, это будет затронуто) .
К счастью, я нашел простой обходной путь, который не требует установки дополнительных инструментов или изменения package.json:
Чтобы добавить путь к узлу только для текущего конвейера, мы должны добавить задачу Powershell в качестве первой задачи конвейера с помощью текущей команды:
Write-Host ("##vso[task.setvariable variable=Path;]D:\LocalNode\node-v17.8.0-win-x64;$Env:Path")
Остальные задачи конвейера будут использовать версию Node из D:\LocalNode\node-v17.8.0-win-x64.
Если вы хотите создать конвейер для другой версии Node, просто добавьте версию в D:\LocalNode и используйте приведенную выше команду с правильным путем в качестве первой задачи конвейера. Нет проблем, если оба конвейера работают одновременно.
Спасибо, @Andrei, нужно ли мне устанавливать (с NVM) версию узла, специфичную для угловой версии, которую я собираюсь построить в качестве первого шага конвейера? или это не нужно при использовании npx?