Создание разных версий angular на одной машине одновременно

Я знаю, что могу выбрать версию узла для использования с NVM, но могу ли я без проблем создать два угловых проекта (с разными версиями ng и версией узла) одновременно? Мой сценарий — это собственный сервер сборки (Windows) с двумя агентами. Каждый из них может одновременно отвечать за создание приложения Angular с другой версией.

С уважением

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
87
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Конечно, вы можете вместо запуска глобально установленного 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.

Спасибо, @Andrei, нужно ли мне устанавливать (с NVM) версию узла, специфичную для угловой версии, которую я собираюсь построить в качестве первого шага конвейера? или это не нужно при использовании npx?

Josto 17.03.2022 08:33

Да, лучше всего использовать рекомендуемую версию nodejs/npm для конкретной версии angular, хотя она может работать с той же версией.

Andrei 17.03.2022 12:03

Я также рекомендую создавать угловые проекты в контейнерах Docker, таким образом, вы всегда используете одну и ту же среду (ОС, Node.js, NPM,...).

Andrei 17.03.2022 12:05

Действительно, Docker был бы лучшим выбором :), но в этом случае мы не можем его использовать. Итак, моя идея состоит в том, чтобы добавить эти три шага в конвейер: 1: nvm use <version> (устанавливает правильную версию узла в соответствии с угловой версией для сборки) 2: npm Install (для загрузки/обновления модулей узла) 3: npm run build ( для запуска скрипта сборки ng, установленного в package.json). Это правильно с вашей точки зрения? Не о чем беспокоиться, когда два конвейера, создающие разные угловые версии, совпадают?

Josto 17.03.2022 16:08

Одна вещь, о которой вам нужно знать, это то, что когда вы вызываете nvm use, он переключает версию во всех открытых консолях, по крайней мере, в соответствии с окнами nvm: «Когда вы запускаете nvm use x.x.x, активная версия узла автоматически обновляется во всех открыть консольные окна. "" Таким образом, если есть конвейер, работающий с узлом 10, и вы вызываете nvm use 12 во втором конвейере, он везде переключится на узел 12, если в первом конвейере есть другая команда узла, вместо этого будет использоваться узел 12. из 10, так что это может вызвать проблемы.

Andrei 17.03.2022 16:43

Я предлагаю вам протестировать его и посмотреть, как он работает, также взгляните на вольта.ш, он похож на nvm, но может сработать в вашем случае, согласно документам: «Каждый раз, когда вы устанавливаете инструмент с помощью Volta, он добавляет прокладку к вашему PATH, который действует как интеллектуальный (и быстрый) маршрутизатор для правильной версии инструмента и запускает его с правильным движком Node».

Andrei 17.03.2022 16:44
Ответ принят как подходящий

Как заявил @Andrei, невозможно использовать NVM для установки версии Node в начале конвейера, потому что он изменит версию во всех открытых консолях (поэтому, если запущен другой конвейер с другой версией Node, это будет затронуто) .

К счастью, я нашел простой обходной путь, который не требует установки дополнительных инструментов или изменения package.json:

  1. Загрузите версия узла, которую вы хотите в виде zip-файла.
  2. Разархивируйте в папку в агенте (например, C:\LocalNode\node-v17.8.0-win-x64)
  3. Добавить путь узла к среде PATH var только для текущего пайплайна

Чтобы добавить путь к узлу только для текущего конвейера, мы должны добавить задачу 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 и используйте приведенную выше команду с правильным путем в качестве первой задачи конвейера. Нет проблем, если оба конвейера работают одновременно.

Другие вопросы по теме