Додавання файлу .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.