Как управлять файлами конфигурации среды и целями

Когда вы создаете свое угловое приложение с помощью Angular CLI или Nrwl Nx tools, у вас всегда есть папка с файлами окружения:

<APP_FOLDER>/src/environments/
                       └──environment.ts
                       └──environment.prod.ts

Например, вы можете переименовать environment.prod.ts в environment.production.ts, а также создать дополнительные файлы конфигурации для конкретных целей, такие как environment.qa .ts и environment.staging.ts.

└──<APP_FOLDER>/src/environments/
                          └──environment.ts
                          └──environment.production.ts
                          └──environment.qa.ts
                          └──environment.staging.ts

По умолчанию используется файл environment.ts. Чтобы использовать другие файлы, вы должны открыть angular.json и настроить раздел fileReplacements в конфигурации build и добавить целевые блоки в serve и e2e.

Чтобы создать или обслужить ваше приложение с определенной целью, выполните следующие команды:

ng build --configuration=staging
ng start --configuration=staging
ng e2e --configuration=staging
Actually 
ng build --prod 
is just a shorthand for 
ng build --configuration=production

Создать интерфейс для файлов среды

Не используйте файлы среды напрямую, только через DI

Использование глобальных переменных и прямого импорта нарушает подход ООП и тестируемость ваших классов. Так что лучший вариант - создать сервис для внедрения в ваши компоненты и другие сервисы. Вот пример с возможностью использовать значение по умолчанию.

Различайте конфигурацию среды и конфигурацию бизнеса

Файлы конфигурации среды должны включать только значения, специфичные для среды, например apiUrl. В лучшем случае файлы конфигурации среды должны состоять всего из двух свойств:

export const environment: EnvironmentInterface = {
  production: true,
  apiUrl: 'https://api.url',
};

Эти файлы могут включать свойство для включения режима отладки debugMode: true. Также вы можете добавить имя сервера развертывания environmentName: «QA», но не забывайте, что для приложения - плохая практика - знать что-либо о сервере, на котором оно работает.

Никогда не помещайте конфиденциальную информацию, такую ​​как пароли или секретные ключи, в файлы среды.

Другие значения конфигурации, такие как maxItemsOnPage или galleryAnimationSpeed ​​, должны храниться в другом месте и в лучшем случае предоставляться некоторым configuration.service.ts, который может запрашивать конечная точка backend или, по крайней мере, загрузите config.json из папки ресурсов.

  1. Подход с асинхронной конфигурацией (используется, когда конфигурация может быть обновлена ​​во время выполнения)

2. Подход с синхронизацией конфигурации (используйте, когда у вас постоянная конфигурация)

Заменить файлы среды при развертывании или во время выполнения

Многие команды нарушают правило DevOps «Построить один раз, развернуть много», перестраивая приложение для каждой среды, а не просто изменяя конфигурацию и используя одну и ту же сборку.

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

  1. Добавьте заполнители в файлы среды, которые будут заменены во время развертывания
export const environment = {
  production: true,
  apiUrl: ‘APPLICATION_API_URL’,
};

При развертывании строка APPLICATION_API_URL должна быть заменена на соответствующий URL-адрес API, то есть http://api.your-app-server.com.

2. Используйте глобальную переменную и введите ее с помощью томов докеров.

export const environment = {
  production: true,
  apiUrl: window.APPLICATION_API_URL,
};
// in index.html before angular app bundles
<script src="environment.js"></script>

Спасибо за чтение, не стесняйтесь обращаться ко мне по любым связанным вопросам или исправлениям.

— — — — — — — — — — — — —

🚀 Подпишитесь на нас в Medium, Telegram или Twitter, чтобы узнать больше об Angular, архитектуре программного обеспечения и лучших практиках создания веб-приложений!