Ответ 1
С create-react-app
, вы должны префикс REACT_APP_
к имени переменной, чтобы иметь возможность доступа к ней.
Пример:
REACT_APP_API_URL=http://localhost:3000/api
REACT_APP_CALLBACK_URL=http://localhost:3005/callback
Я использую приложение для создания приложения для загрузки моего приложения.
Я добавил два .env
файлов .env.development
и .env.production
в корне.
My .env.development
включает:
API_URL=http://localhost:3000/api
CALLBACK_URL=http://localhost:3005/callback
Когда я запускаю свое приложение с помощью react-scripts start
и process.env
он выплевывает
{ NODE_ENV: "development", PUBLIC_URL: "" }
Я пробовал разные вещи, но он просто не подбирал veriables в моем файле разработки, что я делаю неправильно?!
Структура прямой:
/.env.development
/src/index.js
Скрипт Package.json:
"start": "export PORT=3005; npm-run-all --parallel server:start client:start",
"client:start": "export PORT=3005; react-scripts start",
"server:start": "node server.js",
"build": "react-scripts build",
Редактировать:
@jamcreencia правильно указал, что мои переменные должны иметь префикс REACT_APP
.
Изменить 2
Он работает нормально, если я .env
файл .env
но нет, если я использую .env.development
или .end.production
С create-react-app
, вы должны префикс REACT_APP_
к имени переменной, чтобы иметь возможность доступа к ней.
Пример:
REACT_APP_API_URL=http://localhost:3000/api
REACT_APP_CALLBACK_URL=http://localhost:3005/callback
Если вы хотите использовать несколько окружений, таких как .env.development
.env.production
использовать пакет dotenv
добавить .env.development
и .env.production
в корневую папку проекта
и ваш пакет.json
"scripts": {
"start": "react-app-rewired start",
"build-dev": "dotenv -e .env.development react-app-rewired build",
"build-prod": "dotenv -e .env.production react-app-rewired build",
"build": "react-app-rewired build",
"test": "react-app-rewired test --env=jsdom",
"eject": "react-scripts eject"
},
затем построить в соответствии с
npm run-script build-dev
Убедитесь, что ваш файл .env находится в корневом каталоге, а не в папке src.
Для этого есть модуль env-cmd. Установите через npm npm я env-cmd
затем в свой файл package.json
в разделе scripts
:
"scripts": {
"start": "env-cmd .env.development react-scripts start",
"build": "GENERATE_SOURCEMAP=false env-cmd .env.production react-scripts build",
}
В корне вашего проекта вы должны создать два файла с одинаковыми переменными env, но с разными значениями:
.env.development
.env.production
Тогда исключите их из публики. Для этого в вашем файле .gitignore
добавьте две строки:
.env.development
.env.production
Так что это правильный способ использовать разные переменные env для dev и prod.
Была такая же проблема! Решением было закрыть соединение с сервером моего узла (вы можете сделать это с помощью CTRL + C). Затем перезапустите ваш сервер с помощью 'npm run start', и .env должен работать правильно.
Источник: Github
По поводу env-cmd. В соответствии с добрым постом VMois на gitHub, env-cmd был обновлен (версия 9.0.1 на момент написания), переменные среды будут работать в вашем проекте React следующим образом:
"scripts": {
"build:local": "env-cmd -f ./.env.production.local npm run build",
"build:production": "env-cmd -f ./.env.production npm run build"
}
В вашем файле package.json.
Если файл .env
работает, а .env.development
или .env.production
- нет, то создайте пустой файл .env
вместе с этими двумя. Я не знаю почему, но это работает для меня.
У меня была такая же проблема, но это было потому, что у меня был .env файл в формате YAML вместо JS.
Это было
REACT_APP_API_PATH: 'https://my.api.path'
но это должно быть
REACT_APP_API_PATH = 'https://my.api.path'