Ang .env file ay nag-iimbak ng mga environment variable sa simpleng key-value format at naghihiwalay ng configuration mula sa source code ng application. Ayon sa The Twelve-Factor App (2011), ang configuration ay dapat na mahigpit na hiwalay sa code, at ang mga .env file ay naging pamantayan ng pamamaraang ito. .env File ay nagpapahintulot sa pag-substitute ng iba't ibang halaga ng API keys, server URL, at build flags nang hindi kinakailangang i-recompile ang proyekto.
Mga Pangunahing Punto
.env File ay isang configuration file kung saan iniimbak ang mga environment variable sa simpleng text format na KEY=VALUE. Ang bawat linya ay naglalaman ng isang variable: ang pangalan ng key at ang halaga nito na pinaghihiwalay ng equal sign.
Ang mga .env file ay lumulutas sa pangunahing problema ng modernong development: ang iba't ibang kapaligiran (lokal, testing, produksyon) ay nangangailangan ng ganap na magkakaibang setting. Ang URL ng API server sa lokal na makina ay http://localhost:8080, sa production server — https://api.production.com. Kung ang mga halagang ito ay direktang naka-hardcode sa code ng application, ang bawat build para sa ibang kapaligiran ay nangangailangan ng pagbabago ng source code.
Ang kasanayan ng pag-iimbak ng configuration sa labas ng pangunahing code ng application ay na-standardize sa manifesto ng The Twelve-Factor App (2011), na nagtampok ng environment variables bilang tanging tamang paraan ng pag-configure ng application. Ayon sa survey ng JetBrains Developer Ecosystem (2024), higit sa 67% ng mga mobile developer ay gumagamit ng .env file sa kanilang mga proyekto.
Para sa mobile development, ang .env ay nagbibigay ng karagdagang benepisyo: ang mga halaga ay isinasali sa yugto ng build sa pamamagitan ng Gradle (Android) o xcconfig (iOS), na nagpapahintulot sa paggawa ng magkahiwalay na build para sa development, staging, at produksyon nang hindi binabago ang source code.
Ang .env ay lalong kapaki-pakinabang sa pagtutulungan ng team: bawat developer ay gumagawa ng kanyang sariling lokal na .env na may mga setting para sa kanyang kapaligiran (path sa lokal na DB, debug API keys), at ang mga karaniwang setting ay naitala sa .env.example sa repository. Inaalis nito ang sitwasyon kung saan pagkatapos ng git pull ay nasisira ang build ng developer dahil sa kakulangan ng environment variable na hindi niya alam. Ang bagong miyembro ng team ay kokopya lamang ng .env.example sa .env at pupunan ang kanyang mga lokal na halaga.
Ang format ng .env ay lubhang simple: bawat linya ay isang variable sa anyong KEY=VALUE. Ang mga espasyo sa paligid ng equal sign ay karaniwang binabalewala, ngunit sa karamihan ng mga library ay itinuturing na bahagi ng halaga, kaya mas mainam na iwasan ang mga ito.
Ang mga komento ay nagsisimula sa simbolong # — ang buong linya pagkatapos nito ay binabalewala. Ang mga blangkong linya ay nilalaktawan din. Kung ang halaga ay naglalaman ng mga espasyo, ito ay inilalagay sa doble o solong panipi.
# Mga pangunahing setting ng kapaligiran
APP_NAME=MyMobileApp
APP_ENV=development
# Configuration ng API
API_BASE_URL=http://localhost:3000/api
API_TIMEOUT=30000
# Sensitibong data
DB_PASSWORD=secret_password_123
JWT_SECRET=your_jwt_secret_key
Lahat ng variable sa .env ay mga string, ngunit ang mga library ng pag-load ay maaaring mag-convert sa mga ito sa kinakailangang uri. Para sa pag-escape ng mga espesyal na character, ginagamit ang backslash at mga panipi. Kung ang halaga ay naglalaman ng simbolong # bilang bahagi ng teksto, dapat itong i-escape bilang \#.
KEY=value o KEY="value with spaces"PORT=8080DEBUG=trueKEY=line1\
line2DB_URL=${DB_HOST}:${DB_PORT}Sa pag-load ng .env, ang mga library ay maaaring magsagawa ng interpolation ng variable — isali ang mga halaga ng isang key sa loob ng iba. Halimbawa, ang variable na DATABASE_URL=postgres://${DB_USER}:${DB_PASS}@localhost/db ay magbubukas ng DB_USER at DB_PASS mula sa parehong file.
Ang paraan ng pagkonekta ng .env ay depende sa platform. Ang Android ay gumagamit ng mga Gradle plugin, iOS — mga configuration file na xcconfig, at ang mga cross-platform na solusyon tulad ng Flutter — mga espesyalisadong library.
Sa Android, ang .env ay nilo-load sa pamamagitan ng gradle-dotenv plugin. Binabasa ng plugin ang .env mula sa root ng proyekto at idinaragdag ang mga halaga sa BuildConfig, pagkatapos nito ay magagamit ang mga ito sa Kotlin o Java code sa pamamagitan ng mga generated na field.
// build.gradle.kts (app level)
plugins {
id("co.uzzu.dotenv") version "4.0.0"
}
android {
buildFeatures {
buildConfig = true
}
}
kotlin {
// Access sa code: BuildConfig.API_BASE_URL
buildConfigField("String", "API_BASE_URL",
"\"" + dotenv.get("API_BASE_URL") + "\"")
}
Sa iOS, ang mga environment variable ay karaniwang nako-configure sa pamamagitan ng xcconfig file. Para sa pag-load ng .env sa Swift, ginagamit ang DotEnv library o ang built-in na mekanismo ng Info.plist na may custom na mga key.
// Pag-load ng .env sa Swift project
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"
}
}
Para sa Flutter, mayroong package na flutter_dotenv na naglo-load ng mga variable mula sa .env sa panahon ng initialization ng application. Ang .env file ay inilalagay sa root ng proyekto, at ang mga variable ay nagiging accessible sa pamamagitan ng dotenv class.
// pubspec.yaml
dependencies:
flutter_dotenv: ^5.1
// main.dart — pag-load sa pagsisimula
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));
}
Lahat ng tatlong approach ay may iisang prinsipyo: ang .env ay nilo-load sa yugto ng build o sa pagsisimula ng application, ang mga halaga ay na-cache at ginagamit sa code sa pamamagitan ng generated na constants. Pinipigilan nito ang pagpasok ng sensitibong data sa repository.
Para sa React Native, ginagamit ang package na react-native-config, na sa yugto ng build ay awtomatikong bumubuo ng BuildConfig class para sa Android at constants sa Info.plist para sa iOS mula sa isang .env file sa root ng proyekto. Ito ay lalong maginhawa para sa mga startup na gumagamit ng Expo o bare workflow: isang .env sa root level ay sapat, at lahat ng platform ay nakakatanggap ng parehong environment variables nang walang pagdodoble ng configuration.
Sa kabila ng lahat ng benepisyo, ang .env ay hindi isang ganap na solusyon para sa pag-iimbak ng mga lihim sa production environment. Nagbibigay ito ng pangunahing antas ng proteksyon, ngunit sa maling paggamit ay maaaring humantong sa pagtagas ng kumpidensyal na data.
Ang pinakamahalagang patakaran — ang .env ay hindi dapat mapunta sa version control system. Ang file ay idinadagdag sa .gitignore kaagad pagkatapos gawin, at tanging ang sample file na .env.example na may walang laman o pekeng halaga ang naka-commit sa repository.
# .env.example — naka-commit sa repository
APP_NAME=
APP_ENV=development
API_BASE_URL=http://localhost:3000
API_TIMEOUT=30000
# DB_PASSWORD — huwag isama kahit sa sample!
# JWT_SECRET — huwag isama kahit sa sample!
# .gitignore
# Mga Dotenv file
.env
.env*.local
Para sa production project, inirerekomenda ang paggamit ng mga propesyonal na solusyon sa pamamahala ng mga lihim. .env sa produksyon ay pinapayagan lamang kung ang file ay nasa labas ng document-root ng server at may mahigpit na mga karapatan sa pag-access.
Ayon sa Snyk State of Open Source Security (2024), ang pagtagas ng .env file sa pamamagitan ng repositories ay naging sanhi ng higit sa 12% ng lahat ng insidente ng pagbubunyag ng API keys sa mga na-survey na kumpanya. Ang paggamit ng hiwalay na manager ng mga lihim ay nagpapababa ng panganib na ito sa zero.
Ang karagdagang proteksyon ay nakakamit sa pamamagitan ng pagpapatupad ng pre-commit hooks gamit ang mga tool tulad ng husky at lint-staged, na sumusuri kung hindi sinasadyang naidagdag ng developer ang .env sa commit. Ang mga tool tulad ng git-secrets (AWS) at talisman ay nag-scan ng bawat commit para sa mga pattern ng API keys, token, at password, na hinaharangan ang commit kapag may natukoy. Para sa CI pipelines, inirerekomenda ang pagdagdag ng detect-secrets check — isang awtomatikong scanner na hindi papayagang pumasok ang .env file sa repository kahit na magkamali ang developer.
Mga Madalas Itanong
Hindi, ang .env ay hindi dapat i-commit sa Git. Ang file ay naglalaman ng sensitibong data at dapat idagdag sa .gitignore. Sa halip, ang .env.example na may template ng lahat ng kinakailangang variable ay inilalagay sa repository.
.env — ang tunay na file na may production values na hindi kailanman naka-commit. Ang file na .env.example ay naglalaman ng parehong mga key, ngunit may walang laman o pekeng halaga — ito ay naka-commit sa repository bilang sample para sa mga bagong developer.
Maaari, ngunit hindi inirerekomenda nang walang karagdagang proteksyon. Kung ang .env ay ginagamit sa production server, ang file ay dapat ilagay sa labas ng document-root ng web server na may access rights na 600 (may-ari lamang). Para sa mga kritikal na proyekto, mas gusto ang mga manager ng mga lihim.
Sa pamamagitan ng gradle-dotenv plugin (co.uzzu.dotenv). Binabasa ng plugin ang .env mula sa root ng proyekto at ini-export ang mga halaga sa BuildConfig. Ang mga variable ay nagiging available sa code bilang BuildConfig.VARIABLE_NAME sa yugto ng compilation.
Oo, maraming parser ang sumusuporta sa interpolation sa format na ${VAR_NAME}. Halimbawa, ang URL=${HOST}:${PORT} ay magsa-substitute ng mga halaga ng HOST at PORT mula sa parehong file. Gayunpaman, ang functionality na ito ay depende sa partikular na library ng pag-load.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din