#reactjs #typescript #azure #azure-devops #devops
#reactjs #typescript #azure #azure-devops #devops
Вопрос:
Есть ли способ, которым я могу легко изменить переменную в приложении React, зависящую от его текущей стадии в конвейере выпуска Azure DevOps? В качестве примера, скажем, у меня настроено три этапа (dev / QA / production), и я хочу, чтобы идентификатор клиента в конфигурации авторизации приложения менялся местами для каждой среды. Как я могу «определить», какая среда используется в данный момент, чтобы выбрать соответствующий идентификатор? Я бы предпочел, чтобы требовалось запускать только одну задачу сборки и использовать один артефакт для каждого этапа конвейера, а не перестраивать на каждом этапе (если это вообще возможно).
Комментарии:
1. Вы используете webpack или другой?
Ответ №1:
Если вы не хотите связывать для каждого этапа отдельно, вам понадобится сервер, предоставляющий значения, которые вы хотите сделать доступными для клиента.
Это может быть сделано путем рендеринга HTML на стороне сервера. Вот краткий пример шаблона:
<script>
window.valueToExpose = <%= JSON.stringify(value) %>;
</script>
Выражение <%= JSON.stringify(value) %>
будет выполнено шаблонизатором вашего сервера. (Выражение может выглядеть по-разному в зависимости от вашего движка шаблонов)
Сгенерированный сервером HTML может выглядеть следующим образом с value = "Hello World"
:
<script>
window.valueToExpose = "Hello World";
</script>
В вашем приложении React вы можете получить доступ window.valueToExpose
.
Ответ №2:
Во-первых, я ожидаю, что ваше приложение будет развернуто на разных хостах / CNAMEs в зависимости от среды.
Если вы не хотите предоставлять какой-либо идентификатор среды во время развертывания / сборки, который встроен в ваш код, то одним из подходов может быть проверка URL-адреса. Недостатком этого является то, что теперь вы жестко кодируете шаблоны URL в своих скриптах и сопоставляете их со средами. Вы выбираете компромиссы.
Во-вторых, я согласен с ответом Лукаса о том, что вам понадобится внешний источник для конфигураций, которые вы можете извлечь во время выполнения.
Если вы живете в экосистеме M $, я не уверен, что доступно, но из других стеков я могу порекомендовать spring cloud config или configrd.io которая может как экстернализировать, обслуживать, так и предоставлять дополнительные функции управления конфигурацией.