.env fayli atrof-muhit o'zgaruvchilarini oddiy kalit-qiymat formatida saqlaydi va konfiguratsiyani dasturning manba kodidan ajratadi. The Twelve-Factor App (2011) ma'lumotlariga ko'ra, konfiguratsiya koddan qat'iy ajratilishi kerak va .env fayllari ushbu yondashuvning standartiga aylandi. .env File loyihani qayta kompilyatsiya qilmasdan API kalitlari, server URL va kompilyatsiya bayroqlarining turli qiymatlarini almashtirish imkonini beradi.
Asosiy fikrlar
.env File atrof-muhit o'zgaruvchilari oddiy KEY=VALUE matn formatida saqlanadigan konfiguratsiya faylidir. Har bir qator bitta o'zgaruvchini o'z ichiga oladi: kalit nomi va uning qiymati tenglik belgisi bilan ajratilgan.
.env fayllari zamonaviy dasturlashning asosiy muammosini hal qiladi: turli muhitlar (lokal, test, ishlab chiqarish) butunlay boshqa sozlamalarni talab qiladi. Lokal mashinadagi API server URL http://localhost:8080, ishlab chiqarish serverida — https://api.production.com. Agar bu qiymatlar to'g'ridan-to'g'ri dastur kodiga yozilgan bo'lsa, har bir boshqa muhit uchun kompilyatsiya manba kodini o'zgartirishni talab qiladi.
Konfiguratsiyani dasturning asosiy kodidan tashqarida saqlash amaliyoti The Twelve-Factor App (2011) manifestida standartlashtirilgan bo'lib, u atrof-muhit o'zgaruvchilarini dasturni sozlashning yagona to'g'ri usuli sifatida ko'rsatgan. JetBrains Developer Ecosystem (2024) so'roviga ko'ra, mobil ishlab chiqaruvchilarning 67% dan ortig'i o'z loyihalarida .env fayllaridan foydalanadi.
Mobil ishlab chiqish uchun .env qo'shimcha afzallik beradi: qiymatlar Gradle (Android) yoki xcconfig (iOS) orqali kompilyatsiya bosqichida almashtiriladi, bu esa manba kodini o'zgartirmasdan ishlab chiqish, steyjing va ishlab chiqarish uchun alohida kompilyatsiyalar yaratish imkonini beradi.
.env ayniqsa jamoada ishlashda foydali: har bir ishlab chiqaruvchi o'z muhiti uchun lokal .env yaratadi (lokal DB yo'li, debug API kalitlari), umumiy sozlamalar esa repozitariyda .env.example da saqlanadi. Bu git pull-dan so'ng ishlab chiqaruvchi bilmagan atrof-muhit o'zgaruvchisi yo'qligi sababli kompilyatsiya buzilishi holatini bartaraf etadi. Yangi jamoa a'zosi oddiygina .env.example ni .env ga ko'chiradi va o'z lokal qiymatlarini to'ldiradi.
.env formati maksimal darajada sodda: har bir qator KEY=VALUE ko'rinishidagi bitta o'zgaruvchidir. Tenglik belgisi atrofidagi bo'shliqlar odatda e'tiborga olinmaydi, lekin aksariyat kutubxonalarda qiymatning bir qismi hisoblanadi, shuning uchun ulardan qochish yaxshiroq.
Izohlar # belgisi bilan boshlanadi — undan keyingi butun qator e'tiborga olinmaydi. Bo'sh qatorlar ham o'tkazib yuboriladi. Agar qiymat bo'shliqlarni o'z ichiga olsa, u qo'shtirnoq yoki bir tirnoq ichiga olinadi.
# Asosiy muhit sozlamalari
APP_NAME=MyMobileApp
APP_ENV=development
# API konfiguratsiyasi
API_BASE_URL=http://localhost:3000/api
API_TIMEOUT=30000
# Maxfiy ma'lumotlar
DB_PASSWORD=secret_password_123
JWT_SECRET=your_jwt_secret_key
.env dagi barcha o'zgaruvchilar satrlardir, lekin yuklash kutubxonalari ularni kerakli turga o'tkazishi mumkin. Maxsus belgilarni ekranlashtirish uchun teskari qiyshiq chiziqlar va tirnoqlar ishlatiladi. Agar qiymat matnning bir qismi sifatida # belgisini o'z ichiga olsa, uni \# sifatida ekranlashtirish kerak.
KEY=value yoki KEY="value with spaces"PORT=8080DEBUG=trueKEY=line1\
line2DB_URL=${DB_HOST}:${DB_PORT}.env yuklanganda kutubxonalar o'zgaruvchi interpolyatsiyasini amalga oshirishi mumkin — bir kalitlarning qiymatlarini boshqalar ichiga qo'yadi. Masalan, DATABASE_URL=postgres://${DB_USER}:${DB_PASS}@localhost/db o'zgaruvchisi xuddi shu fayldan DB_USER va DB_PASS qiymatlarini ochadi.
.env ni ulash usuli platformaga bog'liq. Android Gradle plaginlaridan, iOS xcconfig konfiguratsiya fayllaridan, Flutter kabi ko'p platformali yechimlar esa ixtisoslashgan kutubxonalardan foydalanadi.
Android da .env gradle-dotenv plagini orqali yuklanadi. Plagin .env ni loyiha ildizidan o'qiydi va qiymatlarni BuildConfig ga qo'shadi, shundan so'ng ular Kotlin yoki Java kodida yaratilgan maydonlar orqali mavjud bo'ladi.
// build.gradle.kts (app level)
plugins {
id("co.uzzu.dotenv") version "4.0.0"
}
android {
buildFeatures {
buildConfig = true
}
}
kotlin {
// Kodda kirish: BuildConfig.API_BASE_URL
buildConfigField("String", "API_BASE_URL",
"\"" + dotenv.get("API_BASE_URL") + "\"")
}
iOS da atrof-muhit o'zgaruvchilari odatda xcconfig fayllari orqali sozlanadi. .env ni Swift da yuklash uchun DotEnv kutubxonasi yoki maxsus kalitlar bilan Info.plist ning ichki mexanizmi ishlatiladi.
// Swift loyihasida .env ni yuklash
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"
}
}
Flutter uchun dastur ishga tushishi vaqtida .env dan o'zgaruvchilarni yuklaydigan flutter_dotenv paketi mavjud. .env fayli loyiha ildiziga joylashtiriladi va o'zgaruvchilar dotenv sinfi orqali mavjud bo'ladi.
// pubspec.yaml
dependencies:
flutter_dotenv: ^5.1
// main.dart — ishga tushganda yuklash
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));
}
Har uch yondashuv umumiy prinsipni birlashtiradi: .env kompilyatsiya bosqichida yoki dastur ishga tushganda yuklanadi, qiymatlar keshlanadi va yaratilgan konstantalar orqali kodda ishlatiladi. Bu maxfiy ma'lumotlarning repozitariyga tushishini oldini oladi.
React Native uchun react-native-config paketi ishlatiladi, u kompilyatsiya bosqichida bitta .env faylidan Android uchun BuildConfig sinfini va iOS uchun Info.plist da konstantalarni avtomatik yaratadi. Bu ayniqsa Expo yoki bare workflow dan foydalanadigan startaplar uchun qulay: ildiz darajasida bitta .env yetarli va barcha platformalar bir xil atrof-muhit o'zgaruvchilarini oladi.
Barcha afzalliklarga qaramay, .env ishlab chiqarish muhitida sirlarni saqlash uchun to'liq huquqli yechim emas. U asosiy himoya darajasini ta'minlaydi, lekin noto'g'ri ishlatilganda maxfiy ma'lumotlarning sizib chiqishiga olib kelishi mumkin.
Eng muhim qoida — .env hech qachon versiya nazorat tizimiga tushmasligi kerak. Fayl yaratilgandan so'ng darhol .gitignore ga qo'shiladi va repozitariyga faqat bo'sh yoki soxta qiymatlari bo'lgan namuna fayli .env.example joylanadi.
# .env.example — repozitariyga commit qilinadi
APP_NAME=
APP_ENV=development
API_BASE_URL=http://localhost:3000
API_TIMEOUT=30000
# DB_PASSWORD — namunada ham ko'rsatilmaydi!
# JWT_SECRET — namunada ham ko'rsatilmaydi!
# .gitignore
# Dotenv fayllari
.env
.env*.local
Ishlab chiqarish loyihalari uchun sirlarni boshqarish bo'yicha professional yechimlardan foydalanish tavsiya etiladi. .env ishlab chiqarishda faqat fayl serverning document-root-dan tashqarida joylashgan bo'lsa va qat'iy kirish huquqlariga ega bo'lsa ruxsat etiladi.
Snyk State of Open Source Security (2024) ma'lumotlariga ko'ra, .env fayllarining repozitariy orqali sizib chiqishi so'rovda qatnashgan kompaniyalar orasida API kalitlarining oshkor bo'lishi bilan bog'liq barcha hodisalarning 12% dan ortig'iga sabab bo'lgan. Alohida sirlar menejeridan foydalanish bu xavfni nolga tushirish imkonini beradi.
Qo'shimcha himoya pre-commit hook larini joriy etish orqali erishiladi — husky va lint-staged kabi vositalar ishlab chiqaruvchi tasodifan .env ni commitga qo'shganligini tekshiradi. git-secrets (AWS) va talisman kabi vositalar har bir commitni API kalitlari, tokenlar va parollar namunalariga tekshirib, aniqlanganda commitni bloklaydi. CI quvurlari uchun detect-secrets tekshiruvini qo'shish tavsiya etiladi — bu ishlab chiqaruvchi xatosi bo'lsa ham .env faylining repozitariyga tushishiga yo'l qo'ymaydigan avtomatik skanerdir.
Tez-tez beriladigan savollar
Yo'q, .env Git-ga commit qilinmasligi kerak. Fayl maxfiy ma'lumotlarni o'z ichiga oladi va .gitignore ga qo'shilishi kerak. Uning o'rniga repozitariyga barcha kerakli o'zgaruvchilar shabloni bilan .env.example joylashtiriladi.
.env — hech qachon commit qilinmaydigan haqiqiy qiymatli fayl. .env.example fayli bir xil kalitlarni o'z ichiga oladi, lekin bo'sh yoki soxta qiymatlar bilan — yangi ishlab chiqaruvchilar uchun namuna sifatida repozitariyga commit qilinadi.
Mumkin, ammo qo'shimcha himoyasiz tavsiya etilmaydi. Agar .env ishlab chiqarish serverida ishlatilsa, fayl serverning document-root-dan tashqarida 600 kirish huquqi (faqat egasi) bilan joylashgan bo'lishi kerak. Kritik loyihalar uchun sirlar menejerlari afzalroq.
gradle-dotenv (co.uzzu.dotenv) plagini orqali. Plagin .env ni loyiha ildizidan o'qiydi va qiymatlarni BuildConfig ga eksport qiladi. O'zgaruvchilar kompilyatsiya bosqichida kodda BuildConfig.VARIABLE_NAME sifatida mavjud bo'ladi.
Ha, ko'plab parserlar ${VAR_NAME} formatida interpolyatsiyani qo'llab-quvvatlaydi. Masalan, URL=${HOST}:${PORT} xuddi shu fayldan HOST va PORT qiymatlarini almashtiradi. Biroq bu funksiya muayyan yuklash kutubxonasiga bog'liq.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.