Додавання файлу .env до React Project


85

Я намагаюся приховати свій ключ API, коли я приєднуюсь до github, і я переглянув форум, щоб отримати вказівки, особливо наступний пост:

Як приховати ключ API у програмі create-response-?

Я вніс зміни та відновив пряжу. Я не впевнений, що я роблю неправильно –– я додав .envфайл до кореня мого проекту (я його назвав process.env) і у файл, який я щойно помістив REACT_APP_API_KEY = 'my-secret-api-key'.

Я думаю, що це може бути способом додавання ключа до мого fetchв App.js, і я спробував кілька форматів, у тому числі без використання літералу шаблону, але мій проект все одно не буде скомпільований.

Будь-яка допомога дуже вдячна.

performSearch = (query = 'germany') => {
    fetch(`https://api.unsplash.com/search/photos?query=${query}&client_id=${REACT_APP_API_KEY}`)
    .then(response => response.json())
    .then(responseData => {
        this.setState({
            results: responseData.results,
            loading: false
        });
     })
     .catch(error => {
            console.log('Error fetching and parsing data', error);
     });
}


замість того, щоб process.envназивати його .env.local or .env.process та зберігати за межами каталогу src
RIYAJ KHAN

1
Привіт @RIYAJKHAN Я змінив файл на .env.local, і він, безумовно, знаходиться поза каталогом src, але я все ще отримую REACT_APP_API_KEY не визначено: /
Bianca M

1
Для мене це виправлено - це просто закриття терміналу, на якому запущений мій локальний сервер розробників, і повторна робота npm run start.
n00bAppDev

3
Ви не можете приховати секрети в додатку для реагування. Дивіться
stackoverflow.com/a/46839021/4722345

5
НЕ використовуйте це для зберігання секретів. З документації ...WARNING: Do not store any secrets (such as private API keys) in your React app! Environment variables are embedded into the build, meaning anyone can view them by inspecting your app's files.
Нішант Мехта

Відповіді:


97

4 кроки

  1. npm install dotenv --save

  2. Далі додайте наступний рядок у свій додаток.

    require('dotenv').config()

  3. Потім створіть .envфайл у кореневому каталозі програми та додайте до нього змінні.

// contents of .env 

REACT_APP_API_KEY = 'my-secret-api-key'
  1. Нарешті, додайте .envу свій .gitignoreфайл, щоб Git ігнорував його, і він ніколи не потрапляв на GitHub.

Якщо ви використовуєте додаток create-response-, то вам потрібні лише кроки 3 та 4, але майте на увазі, що для початку REACT_APP_вона повинна працювати з змінною .

Довідково: https://create-react-app.dev/docs/adding-custom-environment-variables/

ПРИМІТКА - Потрібно перезапустити програму після додавання змінної у файл .env.

Довідково - https://medium.com/@thejasonfile/using-dotenv-package-to-create-environment-variables-33da4ac4ea8f


34
потрібно перезапустити програму після додавання змінної у файл .env. використовувати "REACT_APP_" перед іменем змінної, якщо ви створюєте додаток для реагування за допомогою "create-response-app".
вікаш

@tarzen chugh, що, якщо я розгортаю свою програму на AWS, наприклад. Оскільки .env є частиною gitignore, чи не буде його ігнорувати? як я можу взяти участь у виробництві?
user2763557

1
де я можу додати require('dotenv').config()? який файл?
aqteifan

1
@aqteifan u не потрібно додавати цей фрагмент, але тоді іменування файлів .ENV відіграє життєво важливу роль
перевірено

1
@ user2763557 шаблон, який я використовую, це створення .env.exampleфайлу, де викладено визначення ключів env. Потім ви можете скопіювати .env.exampleта створити .envфайл (у розробці та виробництві), що містить ваші дійсні значення, наприклад, ключі, базові URL-адреси тощо. Ви повинні додати .envфайл до .gitignore.
Адіс Азхар,

83

Тож я сам новачок у React, і я знайшов спосіб це зробити.

Це рішення не вимагає додаткових пакетів.

Крок 1 ReactDocs

У вищевказаних документах вони згадують експорт у Shell та інші варіанти, і я спробую пояснити, що використовує файл .env

1.1 створити Root / .env

#.env file
REACT_APP_SECRET_NAME=secretvaluehere123

Важливі примітки, ПОВИННО починати з REACT_APP_

1.2 Доступ до змінної ENV

#App.js file or the file you need to access ENV
<p>print env secret to HTML</p>
<pre>{process.env.REACT_APP_SECRET_NAME}</pre>

handleFetchData() { // access in API call
  fetch(`https://awesome.api.io?api-key=${process.env.REACT_APP_SECRET_NAME}`)
    .then((res) => res.json())
    .then((data) => console.log(data))
}

1.3 Випуск Build Env

Тож після того, як я зробив крок 1.1 | 2, він не працював, то я знайшов вищезазначене питання / рішення. Реагуйте на читання / створення env, коли він побудований, тому вам потрібно npm run start щоразу, коли ви змінюєте файл .env, щоб змінні оновлювались.


7
На мій погляд, це правильна відповідь! Не потрібні додаткові пакети, а також правильний спосіб React для імпорту змінних середовища. Працюватимуть інші способи, але навіщо додавати пакет і конфігурацію коду, коли це вже зроблено для вас? Чудова відповідь!
ріанм

12
Мені не вистачало цього REACT_APP_спасибі. Жодна інша людина про це не згадала.
rotimi-best

Це мені чомусь не вдалося. Я отримуюundefined
Si8

@ Si8, чи можете ви розширити інформацію про свою помилку / процес. Який крок ви отримали undefined, чи перезапустили ви додаток після додавання нової змінної до .env див. 1.3
T04435

1
Я все пробував. process.env.REACT_APP_API_KEYкаже undefined.
Michale Rezene

33

Сьогодні це простіше зробити.

Просто створіть файл .env.local у вашому кореневому каталозі та встановіть там змінні. У вашому випадку:

REACT_APP_API_KEY = 'my-secret-api-key'

Потім ви називаєте його у своєму js-файлі таким чином:

process.env.REACT_APP_API_KEY

React підтримує змінні середовища, оскільки response-scripts@0.5.0. Для цього вам не потрібен зовнішній пакет.

https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables#adding-development-environment-variables-in-env

* примітка: Я пропоную .env.local замість .env, оскільки create-response-app додає цей файл до gitignore під час створення проекту.

Пріоритет файлів:

npm початок: .env.development.local, .env.development, .env.local, .env

npm запуску побудови: .env.production.local, .env.production, .env.local, .env

тест npm: .env.test.local, .env.test, .env (примітка .env.local відсутня)

Докладніше: https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables


Правильне називання зробило для мене роботу. Я використовував .env.dev і React повернувся до .env, коли він шукав .env.development
Omnibyte

25

Користувачі Webpack

Якщо ви використовуєте webpack, ви можете встановити та використовувати dotenv-webpackплагін, для цього виконайте наведені нижче дії:

Встановіть пакет

yarn add dotenv-webpack

Створіть .envфайл

// .env
API_KEY='my secret api key'

Додайте його у webpack.config.jsфайл

// webpack.config.js
const Dotenv = require('dotenv-webpack');

module.exports = {
  ...
  plugins: [
    new Dotenv()
  ]
  ...
};

Використовуйте його у своєму коді як

process.env.API_KEY

Щоб отримати додаткову інформацію та інформацію про конфігурацію, відвідайте тут


якщо ви використовуєте webpack-devserver, ви не побачите змін, поки не перезапустите його.
Ісаак Пак,

Це було найкраще рішення для мене. Дякую. Одна примітка: я використовую візуалізацію на стороні сервера, тому мені довелося оновити обидва файли webpack (клієнт теж).
Хорхе Маурісіо

@Aminu Kano, не могли б ви пояснити мені, який сенс використовувати цей підхід, якщо ключ api все ще видно, якщо я переглядаю файл bundle.js в Інтернеті у джерелах?
Лінас М.

@LinasM. так, звичайно, але що ви маєте на увазі під "Інтернетом"?
Аміну Кано

1
@AminuKano, так, це дуже чітко пояснило суть. Дякую
Лінас М.

9

1. Створіть файл .env у своїй кореневій папці

деякі джерела вважають за краще використовувати .env.developmentі , .env.productionале це не обов'язково.

2. Ім'я Вашого ЗМІННОГО -потрібно- починатися з REACT_APP_YOURVARIABLENAME

здається, якщо ваша змінна середовища не починається так, то у вас будуть проблеми

3. Включіть свою змінну

щоб включити змінну навколишнього середовища, просто введіть код process.env.REACT_APP_VARIABLE

Вам не потрібно встановлювати будь-яку зовнішню залежність


Я роблю те саме, але це відображається невизначеним у консолі
ПРАДИП ГОРУЛЬ

Я можу це підтвердити. Це не працює.
Гіпотеза

1
Якщо ви отримуєте значення як невизначені, перекомпілюйте ще раз.
анонім

після перекомпіляції все ще стає невизначеним. console.log('process', process.env.REACT_APP_BASE_URL);
Санат Гупта

8

Вам потрібно встановити npm install env-cmd

Зробіть .env у кореневому каталозі та оновіть, як це & REACT_APP_ - це обов’язковий префікс для імені змінної.

REACT_APP_NODE_ENV="production"
REACT_APP_DB="http://localhost:5000"

Оновіть пакет.json

  "scripts": {
    "start": "env-cmd react-scripts start",
    "build": "env-cmd react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  }

7
  1. Встановити dotenvяк devDependencies:
npm i --save-dev dotenv
  1. Створіть .envфайл у кореневому каталозі:
my-react-app/
|- node-modules/
|- public/
|- src/
|- .env
|- .gitignore
|- package.json
|- package.lock.json.
|- README.md
  1. Оновіть .envфайл, як показано нижче, і REACT_APP_ - це обов’язковий префікс для імені змінної.
REACT_APP_BASE_URL=http://localhost:8000
REACT_APP_API_KEY=YOUR-API-KEY
  1. [ Необов’язково, але хороша практика ] Тепер ви можете створити файл конфігурації для зберігання змінних та експорту змінної, щоб використовувати його з іншого файлу.

Наприклад, я створив файл з іменем base.jsта оновив його, як показано нижче:

export const BASE_URL = process.env.REACT_APP_BASE_URL;
export const API_KEY = process.env.REACT_APP_API_KEY;
  1. Або ви можете просто викликати змінну середовища у вашому файлі JS наступним чином:
process.env.REACT_APP_BASE_URL

Як розрізнити середовища dev та prod під час використання лише одного .envфайлу? Їм відомі нам потрібно створювати .env.developmentі .env.prodфайли, але як ми розрізняємо між ними , використовуючи свій метод?
ameyaraje

@ameyaraje В основному, ми ігноруємо .envфайл у нашому .gitignore. Отже, під час розгортання ми просто копіюємо .envфайл на наш сервер і просто змінюємо BASE_URL та інші необхідні значення. Таким чином, коли йому потрібно розгорнути найновіший код, ми просто витягуємо з git master і розгортаємо його. Ми не думаємо про те .env, що ігноруємо, і встановлюємо його на своєму сервері на самому початку. Дякую!
Fatema T. Zuhora

process.env.REACT_APP_API_KEY не надає значення, що відображається невизначеним. Я зупинив сервер і перезапустив його з запуску в
хвилину

@vikramvi Чи поміщаєте ви значення у змінну з іменем того самого REACT_APP_BASE_URLу файлі .env?
Fatema T. Zuhora

@ FatemaT.Zuhora це було моє погано, я помістив .env у дочірній каталог помилково, замість того, щоб помістити його в кореневий каталог
vikramvi

0

Якщо у випадку, якщо ви отримуєте значення як undefined, тоді вам слід подумати про перезапуск сервера вузлів і повторну компіляцію.

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