TGViewer
Deep Digital Deep Digital @deepdigital · 1.06K subscribers
Post #170 1.33K
Опять это окружение
#frontend #react #nextjs

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

Однако его базовой конфигурации не всегда достаточно для решения определенного рода проблем. Именно поэтому мы постоянно дорабатываем свои корпоративные шаблоны приложений, основанные на Next.js.

Недавно при реализации CI/CD-процесса мы столкнулись с проблемой. При сборке проекта с помощью CLI next конкретные значения используемых переменных окружения зашиваются в код финального бандла. И для того чтобы менять значение env-переменных, необходимо пересобирать проект.

Такой подход нас не устроил, так как необходимо было подменять значения переменных окружения при непосредственном запуске Docker-образа в различных средах. Например, для stage- и production-окружения значение переменной API_URL, которое содержит базовый URL для используемого RESTful API, может различаться.

Второй неприятностью стало то, что одноименной переменной в нашем коде на стороне сервера и клиента должны соответствовать значения различных переменных окружения. Например, в коде у нас есть переменная apiUrl, значение которой на клиентской стороне должно браться из переменной окружения CLIENT_API_URL, а на сервере — SERVER_API_URL. Ведь на сервере запрос к API делается внутри сети, а на клиенте — через внешний http-запрос на доменное имя backend-проекта.

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

🧠 Собрав небольшой брейнcторминг, мы нашли выход и написали хелпер, который помог нам справиться с задачами, описанными выше.

Next.js предоставляет интерфейс Runtime Configuration, с помощью которого возможно указать два набора конфигураций в файле: next.config.js — для сервера serverRuntimeConfig, общий — для клиента и сервера publicRuntimeConfig. В полях конфигураций и будут записаны переменные окружения, как это видно из документации.
More from @deepdigital
  1. May 19, 2026Как расти в непростом рынке, масштабировать группу компаний и не терять фокус на клиентах?…
  2. Dec 26, 2025⚡️Подвели итоги 2025 года Chulakov Group Записали подкаст с Олегом Чулаковым — основателем…
  3. Dec 8, 2025Победы на Tagline Awards 2025 🏆 Снова громко напомнили, зачем делаем дизайн — чтобы созда…
  4. Jun 9, 2025Chulakov ⨉ ИТМО 💥 Мы снова в одном из крупнейших IT-вузов России. Альберт Рыбалко, руково…
  5. Jun 6, 2025🏆 Chulakov — № 1 в дизайне по всем рейтингам Безоговорочный лидер по версии крупнейших ан…
  6. May 6, 2025🙌 Вспоминаем, как насыщенно провели время на IT-конференции Merge Были рады стать партнер…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →