Это все еще лучший альтернативный подход к созданию пакетов веб-пакетов, не зависящих от среды? Наша угловая клиентура ослепила нашу команду разработчиков, и они очень расстроены концепцией отдельных сборок для env

анировали развернуть angular на статическом веб-сайте amazon S3, в настоящее время мы делаем отдельную сборку для каждой среды (разработка / производство). Есть какое-то решение, чтобы построить один раз и развернуть во всех средах.

Заранее спасибо.

 JB Nizet27 сент. 2017 г., 09:10
В чем разница между этими средами? Зачем вам нужна отдельная сборка?

Ответы на вопрос(2)

вы хотите иметь одну сборку (например, сборку с непрерывной интеграцией) для нескольких стеков (разработка, тестирование, производство и т. Д.). Если у вас есть разные настройки в вашем файле среды для каждого стека, у вас будут разные сборки. У вас есть только один вариант для достижения этой цели только с одной сборкой.

В вашем файле среды разработки сохраните параметры разработки, которые вам необходимы для локальной разработки. В вашем файле рабочей среды используйте метки-заполнители для параметров, которые отличаются от ваших параметров разработки.

Затем вы всегда можете создать приложение для производства, и вы получите приложение с заполнителями, скомпилированными в main. *. Bundle.js.

Для развертывания вы должны манипулировать основным файлом. *. Bundle.js (есть Заполнители):

Перед развертыванием: запустите скрипт, который манипулирует основным. *. Bundle.js, чтобы установить, например, производственные настройки.Развертывание. Развертывание приложения в службе приложений.Post-Deploy: запустите скрипт, который манипулирует main. *. Bundle.js, чтобы снова установить заполнители

Да, это не очень хорошее решение, но после 3 дней исследований это лучший вариант. Затем вы можете развернуть свое приложение для нескольких стеков с помощью скриптов.

Я сделал это с помощью сценариев powershell в Visuals Studio Team Services, чтобы использовать функциональность выпуска для развертывания приложения в Microsoft Azure.

 jay20 дек. 2017 г., 22:11
привет daniomi, могу ли я узнать, что вы подразумеваете под заполнителями в bundle.js? Спасибо
 user77668624 сент. 2018 г., 16:01
Я думаю, что заполнители здесь подразумеваются какжетоны (распространенная практиказамена токена во время сборки CD / CI). В вашем файле рабочей среды вместо реальных значений вы предоставляете токены, заключенные в разделители, которые вряд ли существуют в вашем коде, например, такие как:apiBaseUrl: '<<<apiBaseUrl>>>'

омственных приложений на работе.

Основная идея (вдохновленная разделом "config"Документация «12-факторное приложение», для хранения конфигурации на сервере, отдельно от самого приложения.

Когда вы развертываете приложение на сервере, оно получает его конфигурацию с сервера, а не связывает его с приложением.

Это полностью избавляет от необходимости перестраивать приложение для различных сред / сценариев развертывания.

Для этого необходимо изменить способ, которым приложение Angular использует конфигурацию.

При обычном подходе размещения конфигурации в файле environment.ts приложения конфигурация всегда доступна во время выполнения и может быть введена в любое время, когда это необходимо.

При настройке на стороне сервера приложение Angular должно выполнить HTTP-вызов, чтобы получить конфигурацию, поэтому она не доступна сразу.

Мой подход состоял в том, чтобы создать ConfigurationService, который загружает конфигурацию через вызов http. Этот сервис публикует конфигурацию через AsyncSubject rxjs. Я внедряю этот сервис во все классы, которые нуждаются в настройке.

AsyncSubject выдает значение только после вызова его метода onComplete, поэтому потребители конфигурации могут использовать FlatMap поверх AsyncSubject, а затем использовать полученную конфигурацию, например, для получения URL-адреса для вызова API, который им необходимо выполнить.

Остается вопрос, как инициализировать ConfigurationService ... при условии, что все URL-адреса API находятся в конфигурации, как ConfigurationService знает, какой URL-адрес использовать для получения конфигурации?

Мое решение этого заключается в том, чтобы файл конфигурации был доступен по тому же базовому URL, что и файл index.html приложения Angular (например, если index.html находится вhttps://example.com/someapp/index.html, то файл конфигурации находится вhttps://example.com/someapp/config/ui-config.json)

Это позволяет ConfigurationService ссылаться на URL конфигурации относительно. В предыдущем примере он использовал бы URL «config / ui-config.json» или «./config/ui-config.json».

Для тестирования без серверной службы я сохраняю файл конфигурации в app / assets / config, а затем настраиваю прокси-сервер Angular для перехвата запроса конфигурации и возврата его из папки assets / config.

Для развертывания не-dev (QA, Production и т. Д.) Вам нужно сделать так, чтобы файл конфигурации был доступен в том же месте, что и index.html приложения Angular.

Если вы развертываете приложение Angular отдельно от серверной части, это означает просто поместить файл конфигурации в ту же папку, что и файл index.html.

Для развертывания с внешним и внутренним интерфейсами, связанными вместе, как с моими приложениями SpringBoot на базе Java, с приложением Angular, обслуживаемым приложением Java, необходимо организовать для внутреннего интерфейса обслуживание файла конфигурации в ожидаемом URL-адрес.

Для приложений SpringBoot я делаю это с помощью WebMvcConfigurerAdapter, который добавляет ResourceHandler, который делает каталог 'config' (где бы вы ни решили хранить его), и его содержимое доступно, как если бы это был "статический" файл, точно так же, как приложение Angular index.html

 cobolstinks22 мар. 2018 г., 03:51
Это все еще лучший альтернативный подход к созданию пакетов веб-пакетов, не зависящих от среды? Наша угловая клиентура ослепила нашу команду разработчиков, и они очень расстроены концепцией отдельных сборок для env

Ваш ответ на вопрос