TypeScript अनुप्रयोगों का कॉन्फ़िगरेशन: उपकरणों और लाइब्रेरी का अवलोकन
आधुनिक TypeScript-अनुप्रयोग शायद ही कभी अलगाव में काम करता है। इसे यह जानना आवश्यक है कि किस डेटाबेस से कनेक्ट करना है, किस पोर्ट का उपयोग करना है, तृतीय-पक्ष API कहाँ स्थित हैं और विभिन्न वातावरणों (development, staging, production) में कैसे व्यवहार करना है। सक्षम कॉन्फ़िगरेशन केवल सेटिंग्स संग्रहीत करना नहीं है, बल्कि एक संपूर्ण अनुशासन है जिसमें सत्यापन, टाइपिंग और सुरक्षा शामिल है।
इस लेख में, हम TypeScript परियोजनाओं में कॉन्फ़िगरेशन प्रबंधन के लिए प्रमुख उपकरणों और लाइब्रेरी का विश्लेषण करेंगे, सरल समाधानों से लेकर औद्योगिक मानकों तक।
अलग कॉन्फ़िगरेशन की आवश्यकता क्यों है?
सेटिंग्स संग्रहीत करने के कई दृष्टिकोण हैं, और प्रत्येक की कमियाँ हैं:
- स्रोत कोड में हार्डकोड — 12-फैक्टर ऐप सिद्धांत का उल्लंघन करता है, कॉन्फ़िगरेशन कोड के साथ मिल जाता है, पुनर्निर्माण के बिना व्यवहार बदलना असंभव है।
- पर्यावरण चर (process.env) — मानक तरीका, लेकिन सभी मान स्ट्रिंग हैं, कोई सत्यापन नहीं है, टाइपो त्रुटि होना आसान है।
- JSON/YAML फ़ाइलें — सुविधाजनक हैं, लेकिन रिपॉजिटरी में रहस्य लीक न करने के लिए सावधानीपूर्वक संस्करण नियंत्रित करने की आवश्यकता है।
TypeScript एक और परत जोड़ता है: हम चाहते हैं कि कॉन्फ़िगरेशन सख्ती से टाइप किया गया हो और त्रुटियाँ रनटाइम के बजाय संकलन चरण में पाई जाएँ।
पर्यावरण चरों के साथ काम करने के लिए लाइब्रेरी
dotenv
.env फ़ाइलों से चर लोड करने के लिए सबसे लोकप्रिय लाइब्रेरी। TypeScript परियोजनाओं में लगभग हमेशा उपयोग किया जाता है।
// npm install dotenv @types/dotenvimport dotenv from 'dotenv';
dotenv.config(); // .env को process.env में लोड करता है
console.log(process.env.PORT); // '3000' — स्ट्रिंगविशेषताएँ:
- किसी भी फ्रेमवर्क (Express, NestJS, Next.js) के साथ काम करता है।
- एकाधिक फ़ाइलों (
.env.local,.env.production) का समर्थन करता है। - सत्यापन नहीं करता — केवल लोडिंग।
env-var
process.env के ऊपर एक रैपर जो रनटाइम में सत्यापन और प्रकार रूपांतरण जोड़ता है।
// npm install env-varimport env from 'env-var';
export const config = { PORT: env.get('PORT').required().asPortNumber(), DB_HOST: env.get('DB_HOST').required().asString(), DEBUG: env.get('DEBUG').default('false').asBool(), API_KEYS: env.get('API_KEYS').asArray()};लाभ: सरल API, अंतर्निहित कन्वर्टर (संख्या, पोर्ट, बूलियन, सरणी)।
नुकसान: प्रकार स्तर पर TypeScript के साथ कोई एकीकरण नहीं — परिणाम अभी भी string | number | boolean है।
औद्योगिक समाधान: convict और node-config
Convict
सत्यापन, डिफ़ॉल्ट मान और विभिन्न स्रोतों (फ़ाइलें, env, कमांड लाइन तर्क) के समर्थन के साथ कॉन्फ़िगरेशन स्कीमा का वर्णन करने के लिए लाइब्रेरी।
// npm install convict @types/convictimport convict from 'convict';
const config = convict({ env: { format: ['production', 'development', 'test'], default: 'development', env: 'NODE_ENV' }, server: { port: { format: 'port', default: 3000, env: 'PORT' } }, db: { host: { format: String, default: 'localhost', env: 'DB_HOST' } }});
config.validate({ allowed: 'strict' }); // अमान्य डेटा पर त्रुटि फेंकेगा
export default config;convict की विशेषताएँ:
- अंतर्निहित प्रारूप:
port,email,url,int,nat(प्राकृतिक संख्या)। process.envऔर JSON फ़ाइलों से स्वचालित पढ़ना।- नेस्टेड स्कीमा का समर्थन।
- कमी