Как организовать конфигурационные параметры в приложении?
Наиболее удобна, имхо, следующая конфигурация конфигов.
Есть, грубо говоря,
Локально используется
При
Есть два варианта распределения параметров по конфиг файлам.
- Первый -
- Второй - в каждом из них хранится полная конфигурация.
У обоих свои плюсы и минусы. Первый - удобней, можно легко добавлять общие конфигурационные параметры и не просить всех разработчиков обновить свой
Данная система позволяет, например, легко переключиться и поработать на локальном фронтенде со
В такой системе никто случайно не запушит свой конфиг в репозиторий, никто не имеет доступа к секретам и чужим параметрам.
Доступ к конфигу в приложении:
#tip #cicd
Наиболее удобна, имхо, следующая конфигурация конфигов.
Есть, грубо говоря,
.env
, .env.staging
, .env.local
Локально используется
.env.local
, он в гитигноре, и у каждого разработчика свой. Если работаешь один, или у всех локально одна конфигурация - .env.local
не нужен.При
CI/CD
.env.staging
заменяет .env
. При этом используются / добавляются в конфиг (для бэка) нужные секреты. У CI/CD
свой конфиг.Есть два варианта распределения параметров по конфиг файлам.
- Первый -
.env
хранит основные параметры, а .env.local
и .env.staging
только переопределяют нужные (merge).- Второй - в каждом из них хранится полная конфигурация.
У обоих свои плюсы и минусы. Первый - удобней, можно легко добавлять общие конфигурационные параметры и не просить всех разработчиков обновить свой
.env.local
. Второй - наглядней, при CI/CD
можно просто заменять файлы. Данная система позволяет, например, легко переключиться и поработать на локальном фронтенде со
staging
бэкендом вместо локального. Можно просто написать скрипт для этого в package.json
.В такой системе никто случайно не запушит свой конфиг в репозиторий, никто не имеет доступа к секретам и чужим параметрам.
env
/ dotenv
- довольно старая штука и недостаточно гибка для реализации удобных конфигов, поэтому я храню конфиги в json
/ js
файлах. Их легко объединять в коде и, вообще, закладывать нужную тебе логику. Ну и древовидная система конфигурационных параметров намного читабельней и удобней в работе в коде.Доступ к конфигу в приложении:
import { config } from "@/app-config"
#tip #cicd
👍4