Рубрики
Uncategorized

Переменные среды выполнения реагирования

Как RECT представляет собой одностраничное приложение (SPA), который работает как статическая страница внутри браузера Runtime … Теги от реагирования, JavaScript, DevOps, SinglePageapp.

В качестве реакции представляют собой одностраничное приложение (SPA), которое работает как статическая страница внутри среды выполнения браузера, а внутри браузера нет ничего подобного переменным времени выполнения, которые могут использоваться SPA. Тем не менее, есть несколько взрослых, через которые мы можем реализовать динамическую переменную среды в приложении React.

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

Нам нужно несколько конфигураций для начала местного развития:

  1. Файл окружающей среды
  2. Сценарий Bash
  3. Сценарий NPM
  4. Включают тег скрипта на публике/index.html.
  5. Скрипт, когда требуется переменная выполнения
1. Файл окружающей среды

Создайте файл env.preprod, создайте этот файл на /public/env/ Расположение Э.Г. /public/env/env.preprod Это файл, в котором будет сохранена переменная среды выполнения, там может быть более одной переменной в файле. Почему в общественном каталоге? Как это будет в комплекте во время процесса сборки в Тарбол

//Filename: env.preprod
REACT_APP_RUNTIME_PREPROD_KEY=xyz
2. Сценарий Bash

Сценарий Bash, который будет выполнен во время NPM начать Для локальных, которые создадут env-config.js с содержимым из файла env.preprod и то же самое для предварительного прод во время развертывания. Для PROD у нас будет файл env-config.js по умолчанию.

Имя имена: Env.sh.

#!/bin/bash

# look for runtime env file
if [ ! -z "${2}" ]; then
  envFile="${1}"/env."${2}"
fi

#If can't find it then exit
if [[ ! -f "$envFile" ]]; then
echo "Env file doesn't exist!"
exit 1;
fi


# create runtime env JS file
if [[ ! -z "${1}" ]]; then
  envJs="${1}/env-config.js"
fi

#Recreate config file
rm -rf ${envJs}
touch ${envJs}

# Add assignment 
echo "window._env_ = {" >> ${envJs}

# Read each line in .env file
# Each line represents key=value pairs
while read -r line || [[ -n "$line" ]];
do
  # Split env variables by character `=`
  if printf '%s\n' "$line" | grep -q -e '='; then
    varname=$(printf '%s\n' "$line" | sed -e 's/=.*//')
    varvalue=$(printf '%s\n' "$line" | sed -e 's/^[^=]*=//')
  fi

  # Read value of current variable if exists as Environment variable
  value=$(printf '%s\n' "${!varname}")
  # Otherwise use value from .env file
  [[ -z $value ]] && value=${varvalue}

  # Append configuration property to JS file
  echo "  $varname: \"$value\"," >> ${envJs}
done < ${envFile}

echo "};" >> "${envJs}"

echo "generated ${envJs} with content"
cat ${envJs}
3. Сценарий NPM

Это будет проводна как Prestart NPM Script и выполнить сценарий Bash.

//Change in package.json file
"prestart" : "chmod +x ./public/env/env.sh && ./public/env/env.sh ./public/env preprod"
4. Включают тег скрипта на публике/index.html.

До настоящего времени Env-Config.js необходимо загрузить в index.html, иначе мы не можем его использовать. Когда создается env-config.js, объект окна браузера присваивается переменной времени выполнения.



  

5. Скрипт, когда переменная среды выполнения на самом деле используется

И теперь для всей тяжелой работы сделана до сих пор, пришло время созревать/использовать переменную среды выполнения. Поскольку переменная назначается как объект окна, теперь мы можем использовать способ, которым мы хотим. Его можно использовать в файле Vanilla JS или в файле rac rac app jsx/tsx. Оформить заказ Образец кода

//Filename: some-important.js
const RUNTIME_ENV_KEY = window?._env_?.REACT_APP_RUNTIME_PROD_KEY ? window._env_.REACT_APP_RUNTIME_PROD_KEY : window?._env_?.REACT_APP_RUNTIME_PREPROD_KEY;

Кроме того, включите некоторые VACUTION.js в головке index.html:



  

Для препровода

  1. Выполнить скрипт во время развертывания
  2. location.conf (при использовании nginx)
1. Выполнить скрипт во время развертывания

Включите скрипт для выполнения Env.sh в процессе развертывания. Для деталей Docker изображений оформить заказ ссылочной секции в конце.

Имя файла: предварительнопроD-deployment.sh.

bash ./public/env/env.sh ./public/env preprod
2. location.conf (при использовании nginx)

Когда сервер NGINX используется в качестве веб-сервера, разрешите доступ к файлу env-config.js.

Имя имена: location.conf.

location ~ /env/(.+\.(?:js))$ {
  expires -1;
  add_header Cache-Control "public"
}

Для производства

1. Создать по умолчанию env-config.js

Создание по умолчанию снижает усилия для настройки любых шагов, необходимых во время развертывания производства. Но если мы хотим, мы можем создать другой файл env, такой как env.prod и запустить то же самое во время развертывания производства. Однако это полностью зависит от вас!

Имя файла: env-config.js

window._env_ = {
  REACT_APP_RUNTIME_PROD_KEY=runtime-env-value
};

Образец кода

Фрагмент кода, представленный в этом блоге, доступен в GitHub, Образец кода Отказ В случае, если вы просто заинтересованы в файлах, заказать Github Gist

Если вы достигли здесь, то я сделал удовлетворительные усилия, чтобы держать вас в чтении. Пожалуйста, будьте добры, чтобы оставить какие-либо комментарии или попросить любые исправления. Счастливое кодирование!

Ссылка:
Мои другие блоги:
  • Почему нам нужен несколько инструментов анализа кода?
  • Что такое вай-ария и почему нам это нужно?
  • Стратегия тестирования приложения Ract

Оригинал: «https://dev.to/akdevcraft/react-runtime-variables-49dc»