фронте один, просто подтягивает нужные переменные из конфигжс?
именно так и есть
Да это я и имею в виду. Это самый простой кейс, просто вынес REACT_APP_BACKEND_URL в config.js А вот если кейсы сложнее, когда у тебя в js какой нибудь if(some) {<some code>} - если some = false вебпак просто убирает весь if c блоком <some code> Вот для таких кейсов, либо собирается два бандла для some: true и для some: false, С разными версиями index.html, которые эти бандлы тянут, а на уровне nginx в контейнере, ты уже возвращаешь правильную версию index.html в зависимости от этого самого some, которое тебе известно на этапе ренедеринга манифестов куба и ты можешь это делать. Второй вариант: some вообще не определяешь на этапе сборки, и заставляешь сборщик оставить конструкцию if(some) { <some code> }. И просто использовать переменную из config.js/config.json, а переменную прокидывать на этапе деплоя. Второй вариант программисты обычно не любят, потому боятся что пользователи могут в браузере в консоле определять этот some и менять поведение фронта. Но на мой взгляд это не супер критичный риск, в целом боятся что пользователь намеренно исполнит какой-то не предусмотренный код на фронте ИМХО странно, юзер все равно это может сделать просто его написав в консоле. Если этот код ходит на какие-то секретные ендпоинты бэкенда, ну так не открывайте их в продакшене и всё. А у себя в браузере пусть юзер творит что вздумается.
Падажжжи. А если > if(some) {<some code>} - если some = false вебпак просто убирает весь if c блоком <some code> То разве он не за-inline-ит тебе и твои REACT_APP_BACKEND_URL из твоего config.js?
config.js не бандлится же
у меня обычно такая дичь { "feedbackForm": { "isShow": true, "uri": "/some/path/", "url": "https://some url/" }, "showMedBanner": {{ med_banner | lower }}, "showDigitalHomeworkBanner": {{ digital_homework_banner | lower }}, "showVovBanner": {{ vov_banner | lower }}, "eomUrl": "{{ eomurl }}", "showGrippBanner": {{ grip_banner | lower }}, "showConfBanner": {{ conf_banner | lower }} }
вот этот конфиг на любое количество окружений залетает
это все настраивается на уровне сборки обычно
да это понятно, я испугался, что реакт будет слишком дохрена умным — если переменная не определена — boom — сочтём её за null value
реакт вообще сборкой не занимается, там тот же webpack же внутрях
насколько я помню это настраиваемое поведение
Обсуждают сегодня