Die kurze Antwort ist nein. Ein Browser kann nicht auf lokale oder Serverumgebungsvariablen zugreifen, so dass dotenv nichts zu suchen hat. Stattdessen geben Sie gewöhnliche Variablen in Ihrer React-Anwendung an, normalerweise in einem Einstellungsmodul.
Webpack kann so erstellt werden, dass Umgebungsvariablen vom Build-Rechner übernommen und in Ihren Einstellungsdateien gespeichert werden. Es funktioniert jedoch, Zeichenfolgen tatsächlich während der Erstellung, nicht der Laufzeit zu ersetzen. Daher werden in jedem Build Ihrer Anwendung die Werte fest codiert. Diese Werte wären dann über das Objekt process.env
zugänglich.
var nodeEnv = process.env.NODE_ENV;
Darüber hinaus können Sie die DefinePlugin
für webpack verwenden, die Sie explizit unterschiedliche Werte je nach Build-Ziel (dev, prod, etc.) angeben können. Beachten Sie, dass Sie alle Werte an JSON.stringify
übergeben müssen.
new webpack.DefinePlugin({
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development')
}),
Diese für jede Art von öffentlichen Details in Ordnung ist, aber sollte nie für jede Art von privaten Schlüsseln, Passwörtern oder API Geheimnisse verwendet werden. Dies liegt daran, dass alle eingebrachten Werte öffentlich zugänglich sind und bösartig verwendet werden könnten, wenn sie vertrauliche Details enthalten. Für diese Art von Dingen müssen Sie serverseitigen Code schreiben und eine einfache API erstellen, die sich mit der API von Drittanbietern unter Verwendung der Secrets authentifizieren und die relevanten Details an Ihre clientseitige Anwendung weitergeben kann. Ihre serverseitige API fungiert als Vermittler und schützt Ihre Geheimnisse, während Sie immer noch die Daten erhalten, die Sie benötigen.
Danke. Wie kann ich das für Dinge wie API-Schlüssel tun? Zum Beispiel Google Maps API-Schlüssel. Ich meine, dass es gut ist, das zu enthüllen, denke ich, da nur ein Domain-Ursprung auf der Whitelist steht. Aber nur neugierig. TY! – user1354934
Ich habe eine Erklärung hinzugefügt, wie dies in meiner Antwort zu tun ist. Die kurze Antwort ist, schreiben Sie eine serverseitige Anwendung, mit der Ihre Client-App sprechen kann, und machen Sie alle privaten/geheimen Dinge dort. – Soviut
Danke. Tut mir leid, wenn das dumm klingt, aber meinst du etwas wie das, was ich gerade gemacht habe - mein Backend (Express-App) hat einen/api-auth-Endpunkt, der über ein JWT sendet, das dann in LS gespeichert wird. Ich verwende das, wenn es gültig ist (andernfalls aktualisiere es), so dass der Klient sich sorgen muss, um ein gültiges Token zu erhalten, um auf irgendwelche api Antwort/Daten zuzugreifen. – user1354934