Вопрос проверяет понимание управления конфигурацией URL для разных окружений (dev/test/prod) в веб-приложениях.
При разработке веб-приложений часто требуется использовать разные URL для API, баз данных или внешних сервисов в зависимости от окружения: разработка (dev), тестирование (test) и продакшн (prod). Прямое указание URL в коде приводит к проблемам при развертывании и увеличивает риск ошибок. Вместо этого применяются переменные окружения или конфигурационные файлы.
Самый распространенный подход — хранить URL в переменных окружения. В Node.js это делается с помощью модуля dotenv, который загружает переменные из файла .env. Для разных окружений создаются отдельные файлы: .env.development, .env.test, .env.production. В React приложениях переменные должны начинаться с REACT_APP_.
// .env.development
REACT_APP_API_URL=http://localhost:3000/api
// .env.production
REACT_APP_API_URL=https://api.example.comВ коде обращение происходит через process.env.REACT_APP_API_URL. При сборке (build) автоматически подставляется нужный файл в зависимости от команды.
Альтернативный метод — создать файлы конфигурации для каждого окружения, например config.dev.js, config.prod.js. В зависимости от переменной NODE_ENV подгружается нужный файл. Этот подход удобен, когда нужно управлять не только URL, но и другими настройками.
// config.js
const config = {
development: { apiUrl: 'http://localhost:3000/api' },
production: { apiUrl: 'https://api.example.com' }
};
const env = process.env.NODE_ENV || 'development';
module.exports = config[env];В системах непрерывной интеграции (CI/CD) переменные окружения задаются на уровне пайплайна или сервера. Это позволяет динамически подставлять URL для каждого окружения без изменения кода. Например, в Docker контейнере переменные передаются через docker run -e или файл .env.
Использование переменных окружения или конфигурационных файлов для управления URL — это стандартная практика, которая делает приложение гибким, безопасным и легко развертываемым в разных средах. Рекомендуется применять этот подход во всех проектах, где есть несколько окружений.