Hinzufügen einer .env-Datei zu React Project


84

Ich versuche, meinen API-Schlüssel zu verbergen, wenn ich mich zu Github verpflichte, und habe das Forum nach Anleitungen durchsucht, insbesondere den folgenden Beitrag:

Wie verstecke ich den API-Schlüssel in der Create-React-App?

Ich habe die Änderungen vorgenommen und das Garn neu gestartet. Ich bin mir nicht sicher, was ich falsch mache - Ich habe eine .envDatei zum Stammverzeichnis meines Projekts hinzugefügt (ich habe sie benannt process.env) und in die Datei, die ich gerade eingefügt habe REACT_APP_API_KEY = 'my-secret-api-key'.

Ich denke, es ist möglicherweise die Art und Weise, wie ich den Schlüssel zu meiner fetchin App.js hinzufüge, und ich habe mehrere Formate ausprobiert, auch ohne das Vorlagenliteral zu verwenden, aber mein Projekt wird immer noch nicht kompiliert.

Jede Hilfe wird sehr geschätzt.

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);
     });
}


anstatt es zu process.envbenennen .env.local or .env.process und außerhalb des src-Verzeichnisses zu halten
RIYAJ KHAN

1
Hallo @RIYAJKHAN Ich habe die Datei in .env.local geändert und sie befindet sich definitiv außerhalb des src-Verzeichnisses, aber ich erhalte immer noch REACT_APP_API_KEY ist nicht definiert: /
Bianca M

1
Was es für mich behoben hat, war einfach das Terminal zu schließen, auf dem mein lokaler Entwicklungsserver ausgeführt wird, und es erneut auszuführen npm run start.
n00bAppDev

3
Sie können keine Geheimnisse in einer Reaktions-App verbergen. Siehe stackoverflow.com/a/46839021/4722345
JBallin

5
Verwenden Sie dies NICHT, um Geheimnisse zu speichern. Aus den Dokumenten ...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.
Nishant Mehta

Antworten:


97

4 Schritte

  1. npm install dotenv --save

  2. Fügen Sie als Nächstes die folgende Zeile zu Ihrer App hinzu.

    require('dotenv').config()

  3. Erstellen Sie dann eine .envDatei im Stammverzeichnis Ihrer Anwendung und fügen Sie die Variablen hinzu.

// contents of .env 

REACT_APP_API_KEY = 'my-secret-api-key'
  1. Fügen Sie .envschließlich Ihre .gitignoreDatei hinzu, damit Git sie ignoriert und sie niemals auf GitHub landet.

Wenn Sie die Create-React-App verwenden , benötigen Sie nur die Schritte 3 und 4. Beachten Sie jedoch, dass die Variablen zunächst beginnen müssen, REACT_APP_damit sie funktionieren.

Referenz: https://create-react-app.dev/docs/adding-custom-environment-variables/

HINWEIS - Nach dem Hinzufügen einer Variablen in der ENV-Datei muss die Anwendung neu gestartet werden.

Referenz - https://medium.com/@thejasonfile/using-dotenv-package-to-create-environment-variables-33da4ac4ea8f


34
Sie müssen die Anwendung nach dem Hinzufügen einer Variablen in der ENV-Datei neu starten. Verwenden Sie "REACT_APP_" vor dem Variablennamen, wenn Sie eine Reaktionsanwendung mit "create-react-app" erstellen.
Vikash

@tarzen chugh was ist, wenn ich meine App zum Beispiel für AWS bereitstelle? Da .env Teil von gitignore ist, wird es nicht ignoriert? Wie kann ich die Produktion einbeziehen?
user2763557

@ Vikash Das war es für mich, kleiner Kommentar große Wirkung
Benyam Ephrem

wo füge ich require('dotenv').config()? welche Datei?
Aqteifan

@aqteifan u muss dieses Snippet nicht hinzufügen, aber dann spielt die Benennung von .ENV-Dateien eine wichtige Rolle
Getestet

83

Also bin ich selbst neu in React und habe einen Weg gefunden, dies zu tun.

Diese Lösung erfordert keine zusätzlichen Pakete.

Schritt 1 ReactDocs

In den obigen Dokumenten wird der Export in Shell und andere Optionen erwähnt. Ich werde versuchen, die Verwendung der ENV- Datei zu erläutern

1.1 Erstellen Sie Root / .env

#.env file
REACT_APP_SECRET_NAME=secretvaluehere123

Wichtige Hinweise Es muss mit REACT_APP_ beginnen

1.2 Zugriff auf die ENV-Variable

#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 Ausgabe

Nachdem ich Schritt 1.1 | 2 ausgeführt hatte, funktionierte es nicht und fand das obige Problem / die obige Lösung. Reagieren Sie read / create env, wenn es erstellt wird, sodass Sie jedes Mal, wenn Sie die .env-Datei ändern , npm run start ausführen müssen, damit die Variablen aktualisiert werden.


7
Meiner Meinung nach ist dies die richtige Antwort! Keine zusätzlichen Pakete erforderlich und die richtige Reaktion zum Importieren von Umgebungsvariablen. Andere Möglichkeiten funktionieren, aber warum sollten Sie eine Paket- und Codekonfiguration hinzufügen, wenn dies bereits für Sie erledigt ist? Gute Antwort!
Ryanm

12
Ich habe das vermisst, REACT_APP_danke. Keine andere Person hat es erwähnt.
Rotimi-Best

Das hat bei mir aus irgendeinem Grund nicht funktioniert. Ich bekommeundefined
Si8

@ Si8 könntest du deinen Fehler / Prozess erweitern. Welchen Schritt Sie haben undefined, haben Sie die App neu gestartet, nachdem Sie eine neue Variable zu .env hinzugefügt haben, siehe 1.3
T04435

@ T04435 danke für diese Antwort Kumpel arbeitete wie Charme REACT_APP_ist der Schlüssel hier. Wie kann ich für verschiedene Server konfigurieren, für die ich dev / beta / Production habe? Muss ich für jeden Server unterschiedliche env-Dateien haben?
Kannan T

33

Heute gibt es einen einfacheren Weg, dies zu tun.

Erstellen Sie einfach die Datei .env.local in Ihrem Stammverzeichnis und legen Sie dort die Variablen fest. In deinem Fall:

REACT_APP_API_KEY = 'my-secret-api-key'

Dann rufen Sie es in Ihrer js-Datei folgendermaßen auf:

process.env.REACT_APP_API_KEY

React unterstützt Umgebungsvariablen, da react-scripts@0.5.0. Dazu benötigen Sie kein externes Paket.

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

* Hinweis: Ich schlage .env.local anstelle von .env vor, da create-react-app diese Datei beim Erstellen des Projekts zu gitignore hinzufügt.

Dateipriorität:

npm start: .env.development.local, .env.development, .env.local, .env

npm run build: .env.production.local, .env.production, .env.local, .env

npm-Test: .env.test.local, .env.test, .env (Hinweis .env.local fehlt)

Weitere Informationen: https://facebook.github.io/create-react-app/docs/adding-custom-environment-variables


Die richtige Benennung hat den Job für mich erledigt. Ich habe .env.dev verwendet und React ist auf .env zurückgefallen, als es nach .env.development gesucht hat
Omnibyte

25

Webpack-Benutzer

Wenn Sie ein Webpack verwenden, können Sie das dotenv-webpackPlugin installieren und verwenden. Führen Sie dazu die folgenden Schritte aus:

Installieren Sie das Paket

yarn add dotenv-webpack

Erstellen Sie eine .envDatei

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

Fügen Sie es der webpack.config.jsDatei hinzu

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

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

Verwenden Sie es in Ihrem Code als

process.env.API_KEY

Weitere Informationen und Konfigurationsinformationen finden Sie hier


Wenn Sie webpack-devserver verwenden, werden Änderungen erst nach einem Neustart angezeigt.
Isaac Pak

Dies war die beste Lösung für mich. Vielen Dank. Ein Hinweis: Ich verwende serverseitiges Rendering, daher musste ich beide Webpack-Dateien aktualisieren (auch Client).
Jorge Mauricio

@Aminu Kano Könnten Sie mir bitte erklären, wozu dieser Ansatz gut ist, wenn der API-Schlüssel noch sichtbar ist, wenn ich die Datei bundle.js online in Quellen ansehe?
Linas M.

@LinasM. Ja sicher, aber was meinst du mit "online"?
Aminu Kano

1
@AminuKano, ja, das hat den Punkt sehr klar erklärt. Vielen Dank
Linas M.

9

1. Erstellen Sie die ENV- Datei in Ihrem Stammordner

einige Quellen prefere zu verwenden .env.developmentund , .env.productionaber das ist nicht obligatorisch.

2. Der Name Ihrer VARIABLE -must- muss mit REACT_APP_YOURVARIABLENAME beginnen

Es scheint, dass Sie Probleme haben werden, wenn Ihre Umgebungsvariable nicht so startet

3. Fügen Sie Ihre Variable hinzu

Um Ihre Umgebungsvariable einzuschließen, geben Sie einfach Ihren Code ein process.env.REACT_APP_VARIABLE

Sie müssen keine externe Abhängigkeit installieren


Ich mache das Gleiche, aber es wird in der Konsole
undefiniert angezeigt

Das kann ich bestätigen. Das funktioniert nicht.
Hypothese

1
Wenn Sie die Werte als undefiniert erhalten, kompilieren Sie sie erneut.
anonym

8

Sie müssen npm install env-cmd installieren

Machen Sie .env im Stammverzeichnis und aktualisieren Sie es wie folgt. & REACT_APP_ ist das obligatorische Präfix für den Variablennamen.

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

Aktualisieren Sie package.json

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

6
  1. Installieren Sie dotenvals devDependencies:
npm i --save-dev dotenv
  1. Erstellen Sie eine .envDatei im Stammverzeichnis:
my-react-app/
|- node-modules/
|- public/
|- src/
|- .env
|- .gitignore
|- package.json
|- package.lock.json.
|- README.md
  1. Aktualisieren Sie die .envDatei wie folgt & REACT_APP_ ist das obligatorische Präfix für den Variablennamen.
REACT_APP_BASE_URL=http://localhost:8000
REACT_APP_API_KEY=YOUR-API-KEY
  1. [ Optional, aber bewährte Methode ] Jetzt können Sie eine Konfigurationsdatei zum Speichern der Variablen erstellen und die Variable exportieren, um sie aus anderen Dateien zu verwenden.

Zum Beispiel habe ich eine Datei mit dem Namen erstellt base.jsund wie folgt aktualisiert:

export const BASE_URL = process.env.REACT_APP_BASE_URL;
export const API_KEY = process.env.REACT_APP_API_KEY;
  1. Oder Sie können die Umgebungsvariable in Ihrer JS-Datei einfach folgendermaßen aufrufen:
process.env.REACT_APP_BASE_URL

Wie unterscheidet man zwischen Entwicklungs- und Produktumgebungen, wenn nur eine einzige .envDatei verwendet wird? Im bewusst , dass wir Bedarf erstellen .env.developmentund .env.prodDateien, aber wie unterscheiden wir zwischen ihnen Ihre Methode?
Amyeyaje

@ameyaraje Grundsätzlich ignorieren wir die .envDatei auf unserer .gitignore. Bei der Bereitstellung kopieren wir die .envDatei einfach auf unseren Server und ändern lediglich die BASE_URL und andere erforderliche Werte. Auf diese Weise ziehen wir, wenn der neueste Code bereitgestellt werden muss, einfach vom Git-Master und stellen ihn bereit. Wir denken nicht an das, .envda wir es ignorieren und es ganz am Anfang auf unserem Server einstellen. Vielen Dank!
Fatema T. Zuhora

process.env.REACT_APP_API_KEY gibt keinen Wert an, der undefiniert anzeigt. Ich habe den Server gestoppt und mit npm start neu gestartet
vikramvi

@vikramvi Fügen Sie den Wert in eine Variable mit dem gleichen Namen REACT_APP_BASE_URLin der ENV-Datei ein?
Fatema T. Zuhora

@ FatemaT.Zuhora es war mein schlechtes, ich hatte .env versehentlich in das untergeordnete Verzeichnis gestellt, anstatt es unter das Stammverzeichnis zu stellen
vikramvi

0

Wenn Sie die Werte als erhalten undefined, sollten Sie den Knotenserver neu starten und erneut kompilieren.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.