Я что-то упускаю из-за .env, не могли бы вы мне это объяснить? - PullRequest
3 голосов
/ 19 апреля 2019

У меня есть очень простая потребность: хранить разные конечные точки для моих API в зависимости от среды. Предположим простой файл, подобный этому:

API_URL=http://localhost:8080

должно стать, для моей рабочей среды:

API_URL=http://myprodServer

и я бы хотел провести интеграционный тест и конечную точку uat!

Глядя на мой пакет.json я вижу:

"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",

Итак, моя идея такова:

  1. Поместите аргумент командной строки рядом с "build" и "start", чтобы указать файлы локальной и производственной среды
  2. У меня есть способ доступа к указанной конфигурации в моем приложении, скажем, config.API_URL

Теперь я пришел из весенней загрузки, а при весенней загрузке у меня есть файл для каждой среды.

Я думаю, что dotenv может быть моим решением, но я вижу две странные вещи на их сайте:

  1. Пожалуйста, не передавайте ваш файл .env -> так, как мои коллеги должны построить мое приложение? Я обычно, по крайней мере, нажимаю локальную и тестовую среду, сохраняя файлы uat и production непосредственно под сервером
  2. У вас должен быть только один файл .env -> хорошо, этот уничтожает меня: если у меня есть только один файл, как мне работать с несколькими средами ???

Что мне здесь не хватает? Не могли бы вы помочь мне решить мою проблему? Я новичок в npm, так что я немного растерялся ...

1 Ответ

3 голосов
/ 19 апреля 2019

Похоже, вы используете CRA для разработки своего приложения React.Если это так, ваши переменные env должны быть REACT_APP_API_URL=http://localhost:8080.Обратите внимание на префикс.Если вы используете CRA, вы должны использовать префикс.Подробнее об этом здесь .Если вы делаете это правильно, переменная должна быть доступна в вашем javascript с помощью process.env.REACT_APP_API_URL.

. На работе у каждого из нас есть копия файлов. env локально, так как мы не проверяем еев. У нас есть разные .env файлы для каждой среды - например - .env.production, .env.development, .env.stage.Затем у нас есть скрипт run и build для каждой среды в нашем package.json.Используя пакет env-cmd, наши сценарии могут выглядеть следующим образом:

{
...
...
 "start": "react-scripts start",
 "start:stage": "env-cmd .env.stage.local react-scripts start",
 "start:production": "env-cmd .env.production.local react-scripts start",
 "build": "react-scripts build",
 "build:stage": "env-cmd .env.stage.local react-scripts build",
 "build:development": "env-cmd .env.development.local react-scripts build",
...
...
}

Наряду с этим у нас также есть ветвь git для каждой среды, поэтому в ветке stage мы будем запускатьnpm run build:stage и развертывание в рабочей среде.Мы бы сделали то же самое для производства.

После осмотра установки с несколькими средами я остановился на этом, и он работает нормально.Тем не менее, я был бы открыт для улучшения процесса.

...