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 .env
Datei 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 fetch
in 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);
});
}
quelle
process.env
benennen.env.local or .env.process
und außerhalb des src-Verzeichnisses zu haltennpm run start
.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.
Antworten:
4 Schritte
npm install dotenv --save
Fügen Sie als Nächstes die folgende Zeile zu Ihrer App hinzu.
require('dotenv').config()
Erstellen Sie dann eine
.env
Datei im Stammverzeichnis Ihrer Anwendung und fügen Sie die Variablen hinzu.// contents of .env REACT_APP_API_KEY = 'my-secret-api-key'
.env
schließlich Ihre.gitignore
Datei 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
quelle
require('dotenv').config()
? welche Datei?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
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.
quelle
REACT_APP_
danke. Keine andere Person hat es erwähnt.undefined
undefined
, haben Sie die App neu gestartet, nachdem Sie eine neue Variable zu .env hinzugefügt haben, siehe 1.3REACT_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?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:
React unterstützt Umgebungsvariablen, da [email protected]. 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
quelle
Webpack-Benutzer
Wenn Sie ein Webpack verwenden, können Sie das
dotenv-webpack
Plugin installieren und verwenden. Führen Sie dazu die folgenden Schritte aus:Installieren Sie das Paket
Erstellen Sie eine
.env
Datei// .env API_KEY='my secret api key'
Fügen Sie es der
webpack.config.js
Datei hinzu// webpack.config.js const Dotenv = require('dotenv-webpack'); module.exports = { ... plugins: [ new Dotenv() ] ... };
Verwenden Sie es in Ihrem Code als
Weitere Informationen und Konfigurationsinformationen finden Sie hier
quelle
1. Erstellen Sie die ENV- Datei in Ihrem Stammordner
einige Quellen prefere zu verwenden
.env.development
und ,.env.production
aber 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
quelle
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" }
quelle
dotenv
als devDependencies:.env
Datei im Stammverzeichnis:.env
Datei 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
Zum Beispiel habe ich eine Datei mit dem Namen erstellt
base.js
und wie folgt aktualisiert:export const BASE_URL = process.env.REACT_APP_BASE_URL; export const API_KEY = process.env.REACT_APP_API_KEY;
quelle
.env
Datei verwendet wird? Im bewusst , dass wir Bedarf erstellen.env.development
und.env.prod
Dateien, aber wie unterscheiden wir zwischen ihnen Ihre Methode?.env
Datei auf unserer.gitignore
. Bei der Bereitstellung kopieren wir die.env
Datei 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,.env
da wir es ignorieren und es ganz am Anfang auf unserem Server einstellen. Vielen Dank!REACT_APP_BASE_URL
in der ENV-Datei ein?Wenn Sie die Werte als erhalten
undefined
, sollten Sie den Knotenserver neu starten und erneut kompilieren.quelle