Environment конфигурации

Ember.js предоставляет множество настроек для конфигурации среды, чтобы разработчики могли гибко адаптировать приложение под различные условия. Эти настройки влияют на поведение фреймворка, обеспечивая оптимизацию под разные этапы разработки: от локальной разработки до продакшн-среды. В этой главе рассматриваются основные аспекты конфигурации среды в Ember.js и способы её изменения для различных целей.

Структура конфигурации

Конфигурация среды в Ember.js организована в виде файлов в директории config/. Каждый файл конфигурации соответствует определённой среде (например, development, production или test). Основным файлом конфигурации является config/environment.js, который используется для задания настроек приложения в зависимости от выбранной среды.

Файл config/environment.js

Этот файл экспортирует объект с настройками, которые могут быть использованы на разных этапах разработки. Он выглядит следующим образом:

module.exports = function (environment) {
  let ENV = {
    modulePrefix: 'my-app',
    environment: environment,
    rootURL: '/',
    locationType: 'auto',
    // другие глобальные настройки
  };

  if (environment === 'development') {
    // Настройки для среды разработки
    ENV.apiHost = 'http://localhost:3000';
  }

  if (environment === 'production') {
    // Настройки для продакшн-среды
    ENV.apiHost = 'https://api.myapp.com';
  }

  if (environment === 'test') {
    // Настройки для тестов
    ENV.apiHost = 'http://localhost:3000';
  }

  return ENV;
};

В зависимости от значения переменной environment (которая передаётся в конфигурацию при запуске приложения) настройки могут быть изменены для каждой среды. Эти параметры затем могут быть использованы в коде приложения для разных целей: от выбора API-серверов до настройки специфичных для среды параметров.

Переменная environment

Переменная environment в файле config/environment.js получает значение через команду запуска приложения. Например:

  • Для среды разработки используется команда ember serve или ember start.
  • Для продакшн-среды при сборке проекта используется команда ember build --environment=production.
  • Для тестов используется команда ember test.

Каждая из этих команд передаёт в конфигурацию соответствующее значение переменной environment (например, "development", "production", "test").

Настройка глобальных переменных

В файле config/environment.js можно задать глобальные переменные, которые будут доступны по всему приложению. Это позволяет централизованно управлять важными параметрами, такими как URL API, ключи для сторонних сервисов, настройки логирования и т.д.

Пример настройки глобальной переменной для API:

module.exports = function (environment) {
  let ENV = {
    modulePrefix: 'my-app',
    environment: environment,
    rootURL: '/',
    locationType: 'auto',
    apiHost: 'https://api.default.com',  // Значение по умолчанию
  };

  if (environment === 'development') {
    ENV.apiHost = 'http://localhost:3000';  // Для разработки
  }

  if (environment === 'production') {
    ENV.apiHost = 'https://api.production.com';  // Для продакшн-среды
  }

  return ENV;
};

Глобальная переменная apiHost может быть использована в различных частях приложения, например, в сервисах для выполнения запросов к серверу.

Разделение конфигураций по средам

Конфигурация среды помогает разделить настройки для разных этапов разработки. Основное назначение — это исключить из кода чувствительные данные, такие как ключи API, или настроить специфические параметры, такие как уровень логирования.

Среда разработки (development)

В этой среде обычно активируются инструменты для упрощения работы разработчиков, такие как горячая перезагрузка, подробные логи, упрощённая работа с сервером и многое другое. Настройки для этой среды могут включать локальные серверы, дебаг-режимы и другие фичи для удобства разработки.

Пример конфигурации для среды разработки:

if (environment === 'development') {
  ENV.apiHost = 'http://localhost:3000';
  ENV.debug = true;
  ENV.featureFlags = {
    enableFeatureX: true,
  };
}

Среда тестирования (test)

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

Пример конфигурации для тестов:

if (environment === 'test') {
  ENV.apiHost = 'http://localhost:3000';
  ENV.loggingLevel = 'silent';  // Отключение логирования в тестах
}

Среда продакшн (production)

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

Пример конфигурации для продакшн-среды:

if (environment === 'production') {
  ENV.apiHost = 'https://api.myapp.com';
  ENV.logLevel = 'error';  // Минимизация логирования
  ENV.featureFlags = {
    enableFeatureX: false,
  };
}

Доступ к конфигурации в приложении

После того как параметры конфигурации заданы, они становятся доступными в приложении через объект ENV. Для получения значения можно использовать следующий синтаксис:

import ENV from 'my-app/config/environment';

let apiHost = ENV.apiHost;  // Доступ к глобальной переменной apiHost

Это позволяет централизованно управлять конфигурацией и избегать дублирования значений в коде.

Применение переменных окружения

Дополнительно к настройкам внутри файла config/environment.js, можно использовать переменные окружения для более гибкой конфигурации приложения. Это полезно, например, для задания секретных ключей или для конфигурации на CI/CD-этапах.

Переменные окружения могут быть использованы через стандартный Node.js процесс:

module.exports = function (environment) {
  let ENV = {
    apiHost: process.env.API_HOST || 'https://api.default.com',
  };

  return ENV;
};

Здесь переменная окружения API_HOST будет использована для задания значения параметра apiHost, если она доступна в системе.

Заключение

Конфигурация среды в Ember.js предоставляет мощные возможности для настройки приложения в зависимости от окружения. Это позволяет создавать гибкие, легко настраиваемые приложения, которые могут работать в различных условиях. Разделение конфигураций по средам помогает избежать ошибок и облегчить поддержку проекта на разных этапах разработки.