A .env fájl egyszerű kulcs-érték formátumban tárolja a környezeti változókat, és elválasztja a konfigurációt az alkalmazás forráskódjától. A The Twelve-Factor App (2011) szerint a konfigurációt szigorúan el kell választani a kódtól, és a .env fájlok ennek a megközelítésnek a szabványává váltak. .env File lehetővé teszi különböző API-kulcsok, szerver URL-ek és build flag-ek értékeinek behelyettesítését a projekt újrafordítása nélkül.
Főbb pontok
.env File egy konfigurációs fájl, amelyben a környezeti változók egyszerű KEY=VALUE szöveges formátumban vannak tárolva. Minden sor egy változót tartalmaz: a kulcs nevét és annak értékét egyenlőségjellel elválasztva.
A .env fájlok megoldják a modern fejlesztés alapvető problémáját: a különböző környezetek (helyi, teszt, éles) teljesen eltérő beállításokat igényelnek. Az API szerver URL-je a helyi gépen http://localhost:8080, az éles szerveren — https://api.production.com. Ha ezek az értékek közvetlenül az alkalmazás kódjába vannak ágyazva, minden más környezethez tartozó build a forráskód módosítását igényli.
A konfigurációnak az alkalmazás fő kódján kívüli tárolásának gyakorlatát a The Twelve-Factor App (2011) manifestum standardizálta, amely a környezeti változókat jelölte meg az alkalmazás konfigurálásának egyetlen helyes módjaként. A JetBrains Developer Ecosystem (2024) felmérése szerint a mobil fejlesztők több mint 67%-a használ .env fájlokat a projektjeiben.
A mobilfejlesztés számára a .env további előnyt nyújt: az értékek a build fázisban kerülnek behelyettesítésre a Gradle (Android) vagy xcconfig (iOS) segítségével, lehetővé téve külön build-ek létrehozását fejlesztéshez, teszteléshez és éles környezethez a forráskód módosítása nélkül.
A .env különösen hasznos csapatmunkában: minden fejlesztő létrehozza a saját helyi .env fájlját a saját környezetének beállításaival (helyi adatbázis elérési útja, debug API-kulcsok), a közös beállítások pedig a .env.example fájlban rögzítésre kerülnek a repository-ban. Ez kiküszöböli azt a helyzetet, amikor egy git pull után a fejlesztő build-je elromlik egy olyan környezeti változó hiánya miatt, amelyről nem tudott. Az új csapattag egyszerűen átmásolja a .env.example fájlt .env-be, és kitölti a saját helyi értékeit.
A .env formátuma rendkívül egyszerű: minden sor egy változó KEY=VALUE formában. Az egyenlőségjel körüli szóközök általában figyelmen kívül vannak hagyva, de a legtöbb könyvtárban az érték részének tekintik őket, ezért jobb elkerülni őket.
A megjegyzések # jellel kezdődnek — az utána lévő teljes sor figyelmen kívül van hagyva. Az üres sorok szintén kihagyásra kerülnek. Ha az érték szóközöket tartalmaz, dupla vagy szimpla idézőjelek közé kerül.
# Fő környezeti beállítások
APP_NAME=MyMobileApp
APP_ENV=development
# API konfiguráció
API_BASE_URL=http://localhost:3000/api
API_TIMEOUT=30000
# Érzékeny adatok
DB_PASSWORD=secret_password_123
JWT_SECRET=your_jwt_secret_key
A .env-ben minden változó string, de a betöltő könyvtárak konvertálhatják őket a szükséges típusra. Speciális karakterek escape-eléséhez backslash és idézőjelek használatosak. Ha az érték a # jelet tartalmazza a szöveg részeként, azt \# formában kell escape-elni.
KEY=value vagy KEY="value with spaces"PORT=8080DEBUG=trueKEY=line1\
line2DB_URL=${DB_HOST}:${DB_PORT}A .env betöltésekor a könyvtárak változó-interpolációt végezhetnek — egyes kulcsok értékeit másokba helyettesíthetik be. Például a DATABASE_URL=postgres://${DB_USER}:${DB_PASS}@localhost/db változó kinyitja a DB_USER és DB_PASS értékeket ugyanabból a fájlból.
A .env csatlakoztatásának módja a platformtól függ. Android Gradle plugineket, iOS xcconfig konfigurációs fájlokat, a többplatformos megoldások, mint a Flutter pedig speciális könyvtárakat használnak.
Androidban a .env a gradle-dotenv plugin segítségével töltődik be. A plugin beolvassa a .env fájlt a projekt gyökeréből, és hozzáadja az értékeket a BuildConfig-hoz, amelyek ezután Kotlin vagy Java kódban generált mezőkön keresztül érhetők el.
// build.gradle.kts (app level)
plugins {
id("co.uzzu.dotenv") version "4.0.0"
}
android {
buildFeatures {
buildConfig = true
}
}
kotlin {
// Hozzáférés a kódban: BuildConfig.API_BASE_URL
buildConfigField("String", "API_BASE_URL",
"\"" + dotenv.get("API_BASE_URL") + "\"")
}
iOS-ben a környezeti változókat általában xcconfig fájlokon keresztül konfigurálják. A .env Swift-ben történő betöltéséhez a DotEnv könyvtárat vagy az Info.plist beépített mechanizmusát használják egyedi kulcsokkal.
// .env betöltése Swift projektben
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"
}
}
A Flutter számára létezik a flutter_dotenv csomag, amely az alkalmazás inicializálásakor betölti a változókat a .env fájlból. A .env fájl a projekt gyökerébe kerül, és a változók a dotenv osztályon keresztül érhetők el.
// pubspec.yaml
dependencies:
flutter_dotenv: ^5.1
// main.dart — betöltés indításkor
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));
}
Mindhárom megközelítés közös elvet követ: a .env a build fázisban vagy az alkalmazás indításakor töltődik be, az értékek cache-elődnek és generált konstansokon keresztül használódnak a kódban. Ez megakadályozza az érzékeny adatok repository-ba kerülését.
A React Native esetében a react-native-config csomag használatos, amely a build fázisban automatikusan létrehozza a BuildConfig osztályt Androidhoz és a konstansokat az Info.plist-ben iOS-hez egyetlen .env fájlból a projekt gyökerében. Ez különösen kényelmes az Expo vagy bare workflow-t használó startupok számára: egyetlen .env a gyökér szintjén elegendő, és minden platform ugyanazokat a környezeti változókat kapja a konfigurációk duplikálása nélkül.
Minden előnye ellenére a .env nem teljes értékű megoldás titkok tárolására éles környezetben. Alapvető védelmi szintet nyújt, de helytelen használat esetén bizalmas adatok szivárgásához vezethet.
A legfontosabb szabály — a .env soha ne kerüljön a verziókezelő rendszerbe. A fájl a létrehozás után azonnal hozzáadásra kerül a .gitignore-hoz, és csak a .env.example minta fájl kerül a repository-ba üres vagy fiktív értékekkel.
# .env.example — commitolva a repository-ba
APP_NAME=
APP_ENV=development
API_BASE_URL=http://localhost:3000
API_TIMEOUT=30000
# DB_PASSWORD — még a példában se tüntesd fel!
# JWT_SECRET — még a példában se tüntesd fel!
# .gitignore
# Dotenv fájlok
.env
.env*.local
Éles projektekhez professzionális titokkezelő megoldások használata ajánlott. .env éles környezetben csak akkor megengedett, ha a fájl a szerver document-root-ján kívül található és szigorú hozzáférési jogosultságokkal rendelkezik.
A Snyk State of Open Source Security (2024) szerint a .env fájlok repository-n keresztüli szivárgása a megkérdezett vállalatok körében az API-kulcsok felfedésével kapcsolatos összes incidens több mint 12%-áért volt felelős. Külön titokkezelő használata lehetővé teszi ennek a kockázatnak a nullára csökkentését.
További védelem érhető el pre-commit hook-ok bevezetésével az olyan eszközök használatával, mint a husky és a lint-staged, amelyek ellenőrzik, hogy a fejlesztő véletlenül hozzáadta-e a .env fájlt a commithoz. Az olyan eszközök, mint a git-secrets (AWS) és a talisman, minden commit-ot átvizsgálnak API-kulcs, token és jelszó minták után, és blokkolják a commit-ot észlelés esetén. CI pipeline-okhoz ajánlott a detect-secrets ellenőrzés hozzáadása — egy automatikus szkenner, amely még fejlesztői hiba esetén sem engedi a .env fájlt a repository-ba.
Gyakran Ismételt Kérdések
Nem, a .env fájlt nem szabad Git-be commitolni. A fájl érzékeny adatokat tartalmaz, és hozzá kell adni a .gitignore-hoz. Helyette a .env.example fájl kerül a repository-ba az összes szükséges változó sablonjával.
.env — a tényleges fájl éles értékekkel, amely soha nem kerül commitolásra. A .env.example fájl ugyanazokat a kulcsokat tartalmazza, de üres vagy fiktív értékekkel — ez mintaként kerül a repository-ba új fejlesztők számára.
Igen, de további védelem nélkül nem ajánlott. Ha a .env éles szerveren kerül használatra, a fájlnak a webszerver document-root-ján kívül kell elhelyezkednie 600-as hozzáférési jogosultsággal (csak tulajdonos). Kritikus projektekhez a titokkezelők előnyösebbek.
A gradle-dotenv plugin (co.uzzu.dotenv) segítségével. A plugin beolvassa a .env fájlt a projekt gyökeréből, és exportálja az értékeket a BuildConfig-ba. A változók a kódban BuildConfig.VARIABLE_NAME formában érhetők el a fordítási fázisban.
Igen, sok parser támogatja az interpolációt ${VAR_NAME} formátumban. Például a URL=${HOST}:${PORT} behelyettesíti a HOST és PORT értékeket ugyanabból a fájlból. Ez a funkció azonban az adott betöltő könyvtártól függ.
Összefoglaló
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is