Die .env-Datei speichert Umgebungsvariablen in einem einfachen Schlüssel-Wert-Format und trennt die Konfiguration vom Quellcode der Anwendung. Laut The Twelve-Factor App (2011) muss die Konfiguration streng vom Code getrennt werden, und .env-Dateien sind zum Standard dieses Ansatzes geworden. .env File ermöglicht es, verschiedene Werte von API-Schlüsseln, Server-URLs und Build-Flags ohne Neukompilierung des Projekts einzufügen.
Wichtigste Punkte
.env File ist eine Konfigurationsdatei, die Umgebungsvariablen in einem einfachen Textformat KEY=VALUE speichert. Jede Zeile enthält eine Variable: den Schlüsselnamen und seinen Wert, getrennt durch ein Gleichheitszeichen.
.env-Dateien lösen ein grundlegendes Problem der modernen Entwicklung: Verschiedene Umgebungen (lokal, Test, Produktion) erfordern völlig unterschiedliche Einstellungen. Die API-Server-URL auf einem lokalen Rechner lautet http://localhost:8080, auf einem Produktionsserver https://api.production.com. Wenn diese Werte direkt im Anwendungscode hartcodiert sind, erfordert jeder Build für eine andere Umgebung eine Änderung des Quellcodes.
Die Praxis, die Konfiguration außerhalb des Hauptanwendungscodes zu speichern, wurde im Manifest The Twelve-Factor App (2011) standardisiert, das Umgebungsvariablen als einzig richtige Methode zur Konfiguration einer Anwendung identifizierte. Laut der JetBrains Developer Ecosystem Umfrage (2024) verwenden mehr als 67% der mobilen Entwickler .env-Dateien in ihren Projekten.
Für die mobile Entwicklung bietet .env einen zusätzlichen Vorteil: Werte werden zur Build-Zeit über Gradle (Android) oder xcconfig (iOS) eingesetzt, was separate Builds für Entwicklung, Staging und Produktion ohne Änderung des Quellcodes ermöglicht.
.env ist besonders nützlich bei der Teamarbeit: Jeder Entwickler erstellt seine eigene lokale .env mit Einstellungen für seine Umgebung (lokaler DB-Pfad, Debug-API-Schlüssel), während die gemeinsamen Einstellungen im Repository als .env.example festgelegt werden. Dies eliminiert die Situation, in der nach einem git pull der Build eines Entwicklers aufgrund einer fehlenden Umgebungsvariable, von der er nichts wusste, fehlschlägt. Ein neues Teammitglied kopiert einfach .env.example in .env und füllt seine lokalen Werte ein.
Das .env-Format ist denkbar einfach: Jede Zeile ist eine Variable in der Form KEY=VALUE. Leerzeichen um das Gleichheitszeichen werden normalerweise ignoriert, aber in den meisten Bibliotheken als Teil des Werts betrachtet, daher ist es besser, sie zu vermeiden.
Kommentare beginnen mit dem #-Zeichen — die gesamte Zeile danach wird ignoriert. Leere Zeilen werden ebenfalls übersprungen. Wenn der Wert Leerzeichen enthält, wird er in doppelte oder einfache Anführungszeichen gesetzt.
# Grundeinstellungen der Umgebung
APP_NAME=MyMobileApp
APP_ENV=development
# API-Konfiguration
API_BASE_URL=http://localhost:3000/api
API_TIMEOUT=30000
# Sensible Daten
DB_PASSWORD=secret_password_123
JWT_SECRET=your_jwt_secret_key
Alle Variablen in .env sind Zeichenketten, aber Ladebibliotheken können sie in den erforderlichen Typ umwandeln. Zum Escapen von Sonderzeichen werden Backslashes und Anführungszeichen verwendet. Wenn ein Wert das #-Zeichen als Teil des Textes enthält, muss es als \# escaped werden.
KEY=value oder KEY="value with spaces"PORT=8080DEBUG=trueKEY=line1\
line2DB_URL=${DB_HOST}:${DB_PORT}Beim Laden von .env können Bibliotheken Variableninterpolation durchführen — Werte eines Schlüssels innerhalb anderer ersetzen. Zum Beispiel wird die Variable DATABASE_URL=postgres://${DB_USER}:${DB_PASS}@localhost/db DB_USER und DB_PASS aus derselben Datei expandieren.
Die Methode zum Anschließen von .env hängt von der Plattform ab. Android verwendet Gradle-Plugins, iOS — xcconfig-Konfigurationsdateien, und plattformübergreifende Lösungen wie Flutter — spezialisierte Bibliotheken.
Unter Android wird .env über das Plugin gradle-dotenv geladen. Das Plugin liest .env aus dem Projektstammverzeichnis und fügt die Werte zu BuildConfig hinzu, wonach sie im Kotlin- oder Java-Code über generierte Felder verfügbar sind.
// build.gradle.kts (App-Ebene)
plugins {
id("co.uzzu.dotenv") version "4.0.0"
}
android {
buildFeatures {
buildConfig = true
}
}
kotlin {
// Zugriff im Code: BuildConfig.API_BASE_URL
buildConfigField("String", "API_BASE_URL",
"\"" + dotenv.get("API_BASE_URL") + "\"")
}
Unter iOS werden Umgebungsvariablen normalerweise über xcconfig-Dateien konfiguriert. Zum Laden von .env in Swift wird die Bibliothek DotEnv oder der integrierte Info.plist-Mechanismus mit benutzerdefinierten Schlüsseln verwendet.
// Laden von .env in Swift-Projekt
import DotEnv
struct AppConfig {
static func load() {
let env = DotEnv(Bundle.main)
env.load()
let apiURL = ProcessInfo.processInfo
.environment["API_BASE_URL"] ??
"https://default.api.com"
}
}
Für Flutter gibt es das Paket flutter_dotenv, das die Variablen aus .env während der Anwendungsinitialisierung lädt. Die .env-Datei wird im Projektstammverzeichnis abgelegt, und die Variablen sind über die Klasse dotenv verfügbar.
// pubspec.yaml
dependencies:
flutter_dotenv: ^5.1
// main.dart — Laden beim Start
import 'package:flutter_dotenv/flutter_dotenv.dart';
void main() async {
await dotenv.load(fileName: '.env');
var apiUrl = dotenv.get('API_BASE_URL');
runApp(MyApp(baseUrl: apiUrl));
}
Alle drei Ansätze haben ein gemeinsames Prinzip: .env wird zur Build-Zeit oder beim Start der Anwendung geladen, die Werte werden zwischengespeichert und im Code über generierte Konstanten verwendet. Dies verhindert, dass sensible Daten in das Repository gelangen.
Für React Native wird das Paket react-native-config verwendet, das zur Build-Zeit automatisch eine BuildConfig-Klasse für Android und Konstanten in Info.plist für iOS aus einer einzigen .env-Datei im Projektstammverzeichnis generiert. Dies ist besonders praktisch für Startups, die Expo oder bare workflow verwenden: Eine einzige .env auf Stammebene reicht aus, damit alle Plattformen dieselben Umgebungsvariablen ohne Duplizieren von Konfigurationen erhalten.
Trotz aller Vorteile ist .env keine vollwertige Lösung zum Speichern von Geheimnissen in einer Produktionsumgebung. Es bietet ein grundlegendes Schutzniveau, kann aber bei falscher Verwendung zu einem Leck vertraulicher Daten führen.
Die wichtigste Regel — .env darf niemals in die Versionsverwaltung des Repositorys gelangen. Die Datei wird unmittelbar nach der Erstellung zu .gitignore hinzugefügt, und nur die Beispieldatei .env.example mit leeren oder fiktiven Werten wird in das Repository committet.
# .env.example — wird ins Repository committet
APP_NAME=
APP_ENV=development
API_BASE_URL=http://localhost:3000
API_TIMEOUT=30000
# DB_PASSWORD — nicht einmal im Beispiel angeben!
# JWT_SECRET — nicht einmal im Beispiel angeben!
# .gitignore
# Dotenv-Dateien
.env
.env*.local
Für Produktionsprojekte wird die Verwendung professioneller Lösungen zur Geheimnisverwaltung empfohlen. .env in der Produktion ist nur akzeptabel, wenn die Datei außerhalb des document-root des Servers liegt und strenge Zugriffsrechte hat.
Laut Snyk State of Open Source Security (2024) war das Durchsickern von .env-Dateien über Repositories die Ursache für mehr als 12% aller Vorfälle mit der Offenlegung von API-Schlüsseln bei den befragten Unternehmen. Die Verwendung eines dedizierten Geheimnisverwalters reduziert dieses Risiko auf null.
Zusätzlicher Schutz wird durch die Implementierung von Pre-Commit-Hooks mit Tools wie husky und lint-staged erreicht, die überprüfen, ob ein Entwickler versehentlich .env zu einem Commit hinzugefügt hat. Tools wie git-secrets (AWS) und talisman scannen jeden Commit auf Muster von API-Schlüsseln, Token und Passwörtern und blockieren den Commit bei Erkennung. Für CI-Pipelines wird empfohlen, detect-secrets hinzuzufügen — einen automatischen Scanner, der selbst bei einem Fehler des Entwicklers keine .env-Datei in das Repository gelangen lässt.
Häufig gestellte Fragen
Nein, .env sollte nicht in Git committet werden. Die Datei enthält sensible Daten und sollte zu .gitignore hinzugefügt werden. Stattdessen wird im Repository .env.example mit einer Vorlage aller erforderlichen Variablen abgelegt.
.env ist die eigentliche Datei mit Produktionswerten, die niemals committet wird. Die Datei .env.example enthält dieselben Schlüssel, aber mit leeren oder gefälschten Werten — sie wird als Vorlage für neue Entwickler in das Repository committet.
Ja, aber ohne zusätzlichen Schutz wird davon abgeraten. Wenn .env auf einem Produktionsserver verwendet wird, muss die Datei außerhalb des document-root des Webservers mit Zugriffsrechten 600 (nur Eigentümer) liegen. Für kritische Projekte sind Geheimnisverwalter vorzuziehen.
Über das Plugin gradle-dotenv (co.uzzu.dotenv). Das Plugin liest .env aus dem Projektstammverzeichnis und exportiert die Werte in BuildConfig. Die Variablen sind zur Kompilierzeit im Code als BuildConfig.VARIABLE_NAME verfügbar.
Ja, viele Parser unterstützen Interpolation im Format ${VAR_NAME}. Zum Beispiel ersetzt URL=${HOST}:${PORT} die Werte von HOST und PORT aus derselben Datei. Diese Fähigkeit hängt jedoch von der spezifischen Ladebibliothek ab.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch