मोबाइल डेवलपमेंट में .env फ़ाइल: यह क्या है, उद्देश्य और कार्य सिद्धांत

लेखक: IT Sectr प्रकाशित: 2026-05-31 पढ़ने का समय: 9 मिनट

.env फ़ाइल एनवायरनमेंट वेरिएबल को सरल की-वैल्यू प्रारूप में संग्रहीत करती है और कॉन्फ़िगरेशन को एप्लिकेशन के स्रोत कोड से अलग करती है। The Twelve-Factor App (2011) के अनुसार, कॉन्फ़िगरेशन को कोड से सख्ती से अलग किया जाना चाहिए, और .env फ़ाइलें इस दृष्टिकोण का मानक बन गई हैं। .env File प्रोजेक्ट को पुनः संकलित किए बिना API कुंजियों, सर्वर URL और बिल्ड फ़्लैग के विभिन्न मानों को सम्मिलित करने की अनुमति देता है।

मुख्य बिंदु

  • .env File — KEY=VALUE प्रारूप में एनवायरनमेंट वेरिएबल वाली एक टेक्स्ट फ़ाइल, प्रोजेक्ट की रूट में स्थित।
  • Twelve-Factor App कॉन्फ़िगरेशन को कोड के बजाय एनवायरनमेंट वेरिएबल में संग्रहीत करने की सिफारिश करता है।
  • सुरक्षा — .env कभी भी Git में नहीं जाना चाहिए; फ़ाइल को .gitignore में जोड़ा जाता है।
  • लोडर लाइब्रेरी — Android में gradle-dotenv, iOS में Config.xcconfig, Flutter में flutter_dotenv का उपयोग किया जाता है।
  • निष्पादन वातावरण — .env से मान बिल्ड चरण में प्रतिस्थापित किए जाते हैं, एप्लिकेशन के चलने के दौरान नहीं।

.env फ़ाइल क्या है और इसकी आवश्यकता क्यों है

.env File एक कॉन्फ़िगरेशन फ़ाइल है जो एनवायरनमेंट वेरिएबल को सरल टेक्स्ट प्रारूप KEY=VALUE में संग्रहीत करती है। प्रत्येक पंक्ति में एक वेरिएबल होता है: कुंजी का नाम और उसका मान, बराबर के चिह्न से अलग किया गया।

.env फ़ाइलें आधुनिक डेवलपमेंट की एक मूलभूत समस्या को हल करती हैं: विभिन्न वातावरण (स्थानीय, परीक्षण, उत्पादन) पूरी तरह से अलग सेटिंग्स की मांग करते हैं। स्थानीय मशीन पर API सर्वर URL http://localhost:8080 है, उत्पादन सर्वर पर https://api.production.com है। यदि ये मान सीधे एप्लिकेशन कोड में हार्डकोड किए गए हैं, तो प्रत्येक अलग वातावरण के लिए बिल्ड को स्रोत कोड बदलने की आवश्यकता होती है।

मुख्य एप्लिकेशन कोड के बाहर कॉन्फ़िगरेशन संग्रहीत करने की प्रथा को The Twelve-Factor App घोषणापत्र (2011) में मानकीकृत किया गया था, जिसने एनवायरनमेंट वेरिएबल को एप्लिकेशन कॉन्फ़िगर करने का एकमात्र सही तरीका बताया। JetBrains Developer Ecosystem सर्वेक्षण (2024) के अनुसार, 67% से अधिक मोबाइल डेवलपर अपने प्रोजेक्ट्स में .env फ़ाइलों का उपयोग करते हैं।

मोबाइल डेवलपमेंट के लिए, .env एक अतिरिक्त लाभ प्रदान करता है: मान बिल्ड चरण में Gradle (Android) या xcconfig (iOS) के माध्यम से प्रतिस्थापित किए जाते हैं, जिससे स्रोत कोड बदले बिना डेवलपमेंट, स्टेजिंग और प्रोडक्शन के लिए अलग-अलग बिल्ड बनाए जा सकते हैं।

.env टीम में काम करते समय विशेष रूप से उपयोगी है: प्रत्येक डेवलपर अपने वातावरण के अनुरूप सेटिंग्स के साथ अपनी स्थानीय .env बनाता है (स्थानीय DB पथ, डीबग API कुंजियाँ), जबकि सामान्य सेटिंग्स रिपॉजिटरी में .env.example के रूप में तय की जाती हैं। यह उस स्थिति को समाप्त करता है जहाँ git pull के बाद किसी डेवलपर का बिल्ड एक अज्ञात एनवायरनमेंट वेरिएबल की कमी के कारण टूट जाता है। टीम का नया सदस्य बस .env.example को .env में कॉपी करता है और अपने स्थानीय मान भरता है।

.env फ़ाइल का सिंटैक्स और संरचना

.env प्रारूप अत्यंत सरल है: प्रत्येक पंक्ति KEY=VALUE रूप में एक वेरिएबल है। बराबर के चिह्न के आसपास के स्थान आमतौर पर अनदेखा किए जाते हैं, लेकिन अधिकांश लाइब्रेरी में वे मान का हिस्सा माने जाते हैं, इसलिए उनसे बचना बेहतर है।

लेखन के मूल नियम

टिप्पणियाँ # चिह्न से शुरू होती हैं — इसके बाद की पूरी पंक्ति अनदेखा कर दी जाती है। खाली पंक्तियाँ भी छोड़ दी जाती हैं। यदि मान में स्थान हैं, तो इसे दोहरे या एकल उद्धरण चिह्नों में बंद किया जाता है।

env
# बुनियादी एनवायरनमेंट सेटिंग्स
APP_NAME=MyMobileApp
APP_ENV=development

# API कॉन्फ़िगरेशन
API_BASE_URL=http://localhost:3000/api
API_TIMEOUT=30000

# संवेदनशील डेटा
DB_PASSWORD=secret_password_123
JWT_SECRET=your_jwt_secret_key

मान प्रकार और एस्केपिंग

.env में सभी वेरिएबल स्ट्रिंग हैं, लेकिन लोडर लाइब्रेरी उन्हें आवश्यक प्रकार में बदल सकती हैं। विशेष वर्णों को एस्केप करने के लिए बैकस्लैश और उद्धरण चिह्नों का उपयोग किया जाता है। यदि मान में पाठ के भाग के रूप में # वर्ण है, तो इसे \# के रूप में एस्केप किया जाना चाहिए।

  • स्ट्रिंग — बिना उद्धरण या उद्धरण में: KEY=value या KEY="value with spaces"
  • संख्या — बिना उद्धरण के लिखी जाती है: PORT=8080
  • बूलियन मान — स्ट्रिंग true/false: DEBUG=true
  • बहुपंक्तीय — पंक्ति के अंत में बैकस्लैश: KEY=line1\
    line2
  • प्रतिस्थापन — कुछ पार्सर में: DB_URL=${DB_HOST}:${DB_PORT}

.env लोड करते समय, लाइब्रेरी वेरिएबल इंटरपोलेशन कर सकती हैं — एक कुंजी के मान को दूसरी के अंदर प्रतिस्थापित करना। उदाहरण के लिए, वेरिएबल DATABASE_URL=postgres://${DB_USER}:${DB_PASS}@localhost/db उसी फ़ाइल से DB_USER और DB_PASS का विस्तार करेगा।

मोबाइल प्रोजेक्ट्स में .env फ़ाइल का एकीकरण

.env को जोड़ने की विधि प्लेटफ़ॉर्म पर निर्भर करती है। Android Gradle प्लगइन का उपयोग करता है, iOS — xcconfig कॉन्फ़िगरेशन फ़ाइलें, और क्रॉस-प्लेटफ़ॉर्म समाधान जैसे Flutter — विशेष लाइब्रेरी।

Android और Gradle: BuildConfig सेटअप

Android में, .env gradle-dotenv प्लगइन के माध्यम से लोड किया जाता है। प्लगइन प्रोजेक्ट की रूट से .env पढ़ता है और मानों को BuildConfig में जोड़ता है, जिसके बाद वे जनरेटेड फ़ील्ड के माध्यम से Kotlin या Java कोड में उपलब्ध होते हैं।

kotlin
// build.gradle.kts (app level)
plugins {
    id("co.uzzu.dotenv") version "4.0.0"
}

android {
    buildFeatures {
        buildConfig = true
    }
}

kotlin {
    // कोड में पहुंच: BuildConfig.API_BASE_URL
    buildConfigField("String", "API_BASE_URL",
        "\"" + dotenv.get("API_BASE_URL") + "\"")
}

iOS और Xcode: Config कनेक्शन

iOS में, एनवायरनमेंट वेरिएबल आमतौर पर xcconfig फ़ाइलों के माध्यम से कॉन्फ़िगर किए जाते हैं। Swift में .env लोड करने के लिए DotEnv लाइब्रेरी या कस्टम कुंजियों के साथ अंतर्निहित Info.plist तंत्र का उपयोग किया जाता है।

swift
// Swift प्रोजेक्ट में .env लोड करना
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 और Dart: flutter_dotenv लाइब्रेरी

Flutter के लिए flutter_dotenv पैकेज मौजूद है, जो एप्लिकेशन इनिशियलाइज़ेशन के दौरान .env से वेरिएबल लोड करता है। .env फ़ाइल को प्रोजेक्ट की रूट में रखा जाता है, और वेरिएबल dotenv क्लास के माध्यम से उपलब्ध होते हैं।

dart
// pubspec.yaml
dependencies:
  flutter_dotenv: ^5.1

// main.dart — स्टार्टअप पर लोड हो रहा है
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));
}

तीनों दृष्टिकोण एक सामान्य सिद्धांत साझा करते हैं: .env बिल्ड चरण में या एप्लिकेशन शुरू होने पर लोड किया जाता है, मान कैश किए जाते हैं और जनरेटेड कॉन्स्टेंट के माध्यम से कोड में उपयोग किए जाते हैं। यह संवेदनशील डेटा को रिपॉजिटरी में जाने से रोकता है।

React Native के लिए react-native-config पैकेज का उपयोग किया जाता है, जो बिल्ड चरण में प्रोजेक्ट की रूट में एक .env फ़ाइल से Android के लिए BuildConfig क्लास और iOS के लिए Info.plist में कॉन्स्टेंट स्वचालित रूप से जनरेट करता है। यह विशेष रूप से उन स्टार्टअप के लिए सुविधाजनक है जो Expo या bare workflow का उपयोग करते हैं: रूट स्तर पर एक .env सभी प्लेटफ़ॉर्म को कॉन्फ़िगरेशन दोहराए बिना समान एनवायरनमेंट वेरिएबल प्राप्त करने के लिए पर्याप्त है।

.env फ़ाइल सुरक्षा और सर्वोत्तम अभ्यास

सभी लाभों के बावजूद, .env उत्पादन वातावरण में रहस्यों को संग्रहीत करने का पूर्ण समाधान नहीं है। यह सुरक्षा का एक बुनियादी स्तर प्रदान करता है, लेकिन यदि गलत तरीके से उपयोग किया जाए, तो यह गोपनीय डेटा के रिसाव का कारण बन सकता है।

.gitignore के माध्यम से सुरक्षा

सबसे महत्वपूर्ण नियम — .env कभी भी रिपॉजिटरी के संस्करण नियंत्रण प्रणाली में नहीं जाना चाहिए। फ़ाइल को बनाने के तुरंत बाद .gitignore में जोड़ा जाता है, और रिपॉजिटरी में केवल नमूना फ़ाइल .env.example खाली या नकली मानों के साथ कमिट की जाती है।

env
# .env.example — रिपॉजिटरी में कमिट किया गया
APP_NAME=
APP_ENV=development
API_BASE_URL=http://localhost:3000
API_TIMEOUT=30000
# DB_PASSWORD — उदाहरण में भी निर्दिष्ट न करें!
# JWT_SECRET — उदाहरण में भी निर्दिष्ट न करें!
env
# .gitignore
# Dotenv फ़ाइलें
.env
.env*.local

उत्पादन वातावरण के लिए विकल्प

उत्पादन प्रोजेक्ट्स के लिए, पेशेवर रहस्य प्रबंधन समाधानों का उपयोग करने की सिफारिश की जाती है। उत्पादन में .env केवल तभी स्वीकार्य है जब फ़ाइल सर्वर के document-root के बाहर स्थित हो और उसके सख्त एक्सेस अधिकार हों।

  • AWS Secrets Manager — कुंजी रोटेशन और एक्सेस ऑडिट के साथ क्लाउड सीक्रेट स्टोरेज
  • Google Secret Manager — API कुंजियाँ और पासवर्ड संग्रहीत करने के लिए Google Cloud सेवा
  • HashiCorp Vault — डायनामिक सीक्रेट और सर्वर-साइड एन्क्रिप्शन वाला टूल
  • Firebase Remote Config — मोबाइल एप्लिकेशन के लिए A/B परीक्षण के साथ क्लाउड कॉन्फ़िगरेशन
  • GitLab CI/CD Variables — बिल्ड पाइपलाइन के लिए अंतर्निहित सीक्रेट स्टोरेज

Snyk State of Open Source Security (2024) के अनुसार, रिपॉजिटरी के माध्यम से .env फ़ाइलों का रिसाव सर्वेक्षण में शामिल कंपनियों के बीच सभी API कुंजी प्रकटीकरण घटनाओं के 12% से अधिक का कारण था। एक समर्पित सीक्रेट मैनेजर का उपयोग इस जोखिम को शून्य तक कम कर देता है।

प्री-कमिट हुक के कार्यान्वयन के माध्यम से अतिरिक्त सुरक्षा प्राप्त की जाती है, जिसमें husky और lint-staged जैसे टूल का उपयोग किया जाता है, जो जाँचते हैं कि क्या डेवलपर ने गलती से .env को कमिट में जोड़ दिया है। git-secrets (AWS) और talisman जैसे टूल प्रत्येक कमिट को API कुंजियों, टोकन और पासवर्ड के पैटर्न के लिए स्कैन करते हैं, पाए जाने पर कमिट को ब्लॉक कर देते हैं। CI पाइपलाइन के लिए, detect-secrets जोड़ने की सिफारिश की जाती है — एक स्वचालित स्कैनर जो डेवलपर की गलती होने पर भी .env फ़ाइल को रिपॉजिटरी में नहीं जाने देगा।

अक्सर पूछे जाने वाले प्रश्न

क्या .env को Git में कमिट करना चाहिए?

नहीं, .env को Git में कमिट नहीं करना चाहिए। फ़ाइल में संवेदनशील डेटा होता है और इसे .gitignore में जोड़ा जाना चाहिए। इसके बजाय, रिपॉजिटरी में सभी आवश्यक वेरिएबल के टेम्पलेट के साथ .env.example रखा जाता है।

.env और .env.example में क्या अंतर है?

.env वास्तविक फ़ाइल है जिसमें उत्पादन मान होते हैं और इसे कभी कमिट नहीं किया जाता। .env.example फ़ाइल में समान कुंजियाँ होती हैं लेकिन खाली या नकली मानों के साथ — यह नए डेवलपर के लिए नमूने के रूप में रिपॉजिटरी में कमिट की जाती है।

क्या उत्पादन में .env का उपयोग किया जा सकता है?

हाँ, लेकिन अतिरिक्त सुरक्षा के बिना इसकी अनुशंसा नहीं की जाती है। यदि उत्पादन सर्वर पर .env का उपयोग किया जाता है, तो फ़ाइल को वेब सर्वर के document-root के बाहर 600 (केवल स्वामी) एक्सेस अधिकारों के साथ स्थित होना चाहिए। महत्वपूर्ण प्रोजेक्ट्स के लिए, सीक्रेट मैनेजर को प्राथमिकता दी जाती है।

Android प्रोजेक्ट में .env कैसे लोड करें?

gradle-dotenv प्लगइन (co.uzzu.dotenv) के माध्यम से। प्लगइन प्रोजेक्ट की रूट से .env पढ़ता है और मानों को BuildConfig में निर्यात करता है। वेरिएबल संकलन चरण में कोड में BuildConfig.VARIABLE_NAME के रूप में उपलब्ध होते हैं।

क्या .env वेरिएबल इंटरपोलेशन का समर्थन करता है?

हाँ, कई पार्सर ${VAR_NAME} प्रारूप में इंटरपोलेशन का समर्थन करते हैं। उदाहरण के लिए, URL=${HOST}:${PORT} उसी फ़ाइल से HOST और PORT के मानों को प्रतिस्थापित करेगा। हालांकि, यह क्षमता विशिष्ट लोडर लाइब्रेरी पर निर्भर करती है।

सारांश

  • .env File — एनवायरनमेंट वेरिएबल संग्रहीत करने के लिए एक सरल टेक्स्ट प्रारूप, जो कॉन्फ़िगरेशन को एप्लिकेशन कोड से अलग करता है।
  • Twelve-Factor App ने आधुनिक एप्लिकेशन डेवलपमेंट के मानक के रूप में एनवायरनमेंट वेरिएबल में कॉन्फ़िगरेशन संग्रहीत करने की स्थापना की।
  • एकीकरण मोबाइल प्रोजेक्ट्स में gradle-dotenv प्लगइन (Android), xcconfig (iOS) या flutter_dotenv (Flutter) के माध्यम से किया जाता है।
  • सुरक्षा .env को .gitignore में जोड़कर और रिपॉजिटरी में .env.example का उपयोग करके सुनिश्चित की जाती है।
  • उत्पादन के लिए पेशेवर समाधानों की आवश्यकता होती है — AWS Secrets Manager, Google Secret Manager या HashiCorp Vault।
  • मान प्रतिस्थापन स्रोत कोड बदले बिना, बिल्ड चरण में Android में BuildConfig या iOS में Info.plist के माध्यम से होता है।
  • रिसाव जोखिम — 12% API कुंजी घटनाएँ रिपॉजिटरी में .env कमिट करने से संबंधित हैं (Snyk, 2024), इसलिए CI में स्वचालित जाँच अनिवार्य है।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें