створити додаток для реагування, який не забирає файли .env?


117

Я використовую додаток create response для завантаження програми.

Я додав два .envфайли .env.developmentі .env.productionв кореневій.

Моє .env.developmentвключає:

API_URL=http://localhost:3000/api
CALLBACK_URL=http://localhost:3005/callback

Коли я запускаю свою програму за допомогою react-scripts startі консолі, process.envвона спливає

{ NODE_ENV: "development", PUBLIC_URL: "" }

Я пробував різні речі, але це просто не збирання змінних у моєму файлі розробки, що я роблю не так ?!

Структура Directry:

/.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.developmentабо.end.production


Чи можете ви опублікувати свій package.jsonфайл?
Steve Chamaillard

2
process.envце те, що може читати серверний сервер (Node або все, що ви використовуєте). Фронт-енд комплект не уявляє, що process.envтаке, як він працює у браузері. Ви можете налаштувати веб-пакет для передачі його в комплекті під час групування, або ще простіше - передати його із внутрішньої частини у файлі індексу, який ви відтворюєте як глобальну змінну.
Рауль Рене,

ймовірно, не так, але я стикався з цим пару разів, і проблема, яку я виявив, полягає в тому, що коли мій комп'ютер використовує багато пам'яті, я не завантажую свою змінну .env. Я використовую ubuntu 16.4. спробуйте завантажити змінну з терміналу, react-scripts start API_URL=http://localhost:3000/api CALLBACK_URL=http://localhost:3005/callbackякщо ви все ще не бачите їх, я б перезапустив свою систему, щоб зменшити використання пам'яті, і спробувати знову, як правило, це вирішує це для мене.
Фемі Оні

@RaulRene create-response-app обробляє .env з коробки, тому що вам не потрібні подальші налаштування
Фемі Оні

Відповіді:


245

З create-react-app, ви повинні префікс REACT_APP_до імені змінної , щоб мати можливість доступу до нього.

Приклад:

REACT_APP_API_URL=http://localhost:3000/api
REACT_APP_CALLBACK_URL=http://localhost:3005/callback

Більше інформації дивіться тут


9
Це життєво важливо. я пропустив це, але так, це не спрацює з префіксом
Фемі Оні

8
Це працює, коли я використовую, .envале не для .env.developmentчи .env.production?
shenku

@shenku Чи вдалося вам з'ясувати, чому це працює лише з, .envа не з .env.developmentіenv.production
Константин

Для розробників, які виконують інтерфейсну роботу, оскільки у вас немає NodeJ у браузері, вам знадобиться веб-пакет ... meh
Стефан

2
Дякую. Я шукав відповідь годинами.
Фахмід

62

Переконайтеся, що ваш файл .env знаходиться в кореневому каталозі, а не всередині папки src.


1
Хоча, читаючи документацію, я побачив, що вона повинна бути в кореневому каталозі, мені все ж вдалося додати свій файл .env у папку src ... (facepalm) Дякую за вашу відповідь.
Корне

У мене була та сама проблема, вона не працювала в папці src, але працювала після переходу в кореневу папку у версії 3.4.3
Vinod Kumar

так, це проблема, дякую щиро
akash maurya

29

Була така сама проблема! Рішенням було закрити підключення до мого сервера вузлів (це можна зробити за допомогою CTRL + C). Потім перезапустіть свій сервер із "npm run start", і .env повинен працювати належним чином.

Джерело: Github


21

Якщо ви хочете використовувати кілька середовищ, таких як .env.development .env.production

використовуйте пакет dotenv-cli

додати .env.developmentі .env.productionв кореневу папку проекту

та ваш package.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 

це dotenvчи dotenv-cli?
Дражен Бєловук

2
Наявність різних файлів .env для різних середовищ тепер також нестандартно підтримується документами create-response-app: create-response-app . Не потрібно явно використовувати dotenv (додаток create-response-app насправді використовує його за кадром для обробки змінних середовища)
Marnix.hoh

@MariaJeysinghAnbu, якому належить цей синтаксис dotenv-cli, а не dotenv: npmjs.com/package/dotenv-cli
AMS777

@ AMS777 Я використовую dotenv npm not dotenv-cli
Maria Jeysingh Anbu

@MariaJeysinghAnbu, я хотів використати, dotenvале отримав помилку. Я перевірив документацію, але не знайшов цієї -eопції для командного рядка. Однак я знайшов це в dotenv-cliдокументації. Ось чому я говорив. Нарешті я використовую env-cmd, а не мати dotenvі dotenv-cliвстановлювати одночасно, що може призвести до плутанини.
AMS777

10

Щодо 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 .


1
Щиро дякую, цей коментар мене врятував. Документація create-response-app цього не оновлювала, тому я з'ясовував, що не так
CKA

1
Ви мене повністю врятували тут. Я крутився на цій штуці. Дякую
MDiesel

хтось дасть цьому хлопцеві медаль
Ріттеш П.В.

7

Для цього існує модуль env-cmd . Встановіть через npm, npm i 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.


спробуйте використати повний шлях, наприклад: ./node_modules/.bin/env-cmd
Nastro

але я не рекомендую підхід у своїй відповіді. Тепер я знаю, що реакція дає вбудовану механіку для роботи з .env
Настро

6

У мене була та сама проблема, але це було тому, що я мав свій .env файл у форматі YAML замість JS.

Це було

REACT_APP_API_PATH: 'https://my.api.path'

але це мало бути

REACT_APP_API_PATH = 'https://my.api.path'

Таке просте, але гарне місце. Я зробив те саме і не міг побачити деревини для дерев. Дякую
Енді Еллісон

Дякую за це! Я шукав цілий день, не помічаючи цієї незначної помилки :)
chia yongkang

3

Якщо .envфайл працює , але .env.developmentчи .env.productionнемає, то створити порожній .envфайл поряд з цими двома. Не знаю чому, але це для мене працює.


0

І пам’ятайте, що після ключа API у файлі env у вас не повинна бути крапка з комою.

REACT_APP_API_KEY = 'ae87cec695cc4heheh639d06c9274a';

має бути

REACT_APP_API_KEY = 'ae87cec695cc44heheh1639d06c9274a'

це була моя помилка


-3

Що стосується останніх реакційних скриптів (3.2.0), це просто, як сказати сказати

PORT=4000
BROWSER=none

у вашому .env або .env.development файлі (..etc), який повинен знаходитись у кореневій папці.

Він НЕ працюватиме з префіксом REACT_APP (документи, здається, застаріли), і він НЕ вимагає додаткових пакунків npm (реакція-сценарії вже включають dotenv 6.2.0)


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.