Я что-то не понимаю в .env, не могли бы вы мне это объяснить?

#node.js #reactjs #dotenv

#node.js #reactjs #dotenv

Вопрос:

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

 API_URL=http://localhost:8080
 

это должно стать для моей среды prod:

 API_URL=http://myprodServer
 

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

Глядя на мой package.json, я вижу:

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

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

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

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

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

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

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

Комментарии:

1.доступ к переменной среды можно получить в nodejs через process.env like process.env.API_URL dotenv — это замена (удобство) для того, где вы можете определить свою переменную среды. у вас может быть config.js файл, в котором вы считываете все переменные среды и экспортируете конфигурацию

Ответ №1:

Похоже, вы используете 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 . Затем у нас есть сценарий запуска и сборки для каждой среды в нашем package.json . Используя env-cmd package, наши скрипты могут выглядеть так:

 {
...
...
 "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 и развертывали в среде Stage. Мы бы сделали то же самое для производства.

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

Комментарии:

1. Наконец-то четкое объяснение! Это работает, спасибо, мне не хватало префикса 🙂 Однако один вопрос: как вы указали, я использовал CRA, необходима ли зависимость dotenv в package.json? Или у меня это уже установлено благодаря CRA?

2. Используется ли он под капотом в CRA или нет, я не уверен. Но вы правы в том, что вам не нужна эта зависимость здесь, поскольку CRA обрабатывает ее за вас. Если бы вы не использовали CRA как шаблон, то вы бы использовали dotenv для выполнения работы.

3. Кроме того, если в своих путешествиях вы столкнетесь с лучшим способом сделать это или можете подумать о том, что можно было бы лучше сделать по-другому, пожалуйста, свяжитесь с нами. Мне было бы интересно узнать.

4. Отличный ответ. Одна вещь, которую я добавлю, это то, что довольно часто файл .env.example предоставляется в качестве шаблона для создания других файлов .env.