JavaScript (Node.js) के लिए CLI फ्रेमवर्क: शक्तिशाली कंसोल एप्लिकेशन बनाना
कंसोल (CLI) उपयोगिताओं का विकास Node.js इकोसिस्टम में प्रमुख कार्यों में से एक है। चाहे वह बिल्ड ऑटोमेशन हो, पैकेज प्रबंधन, कोड जनरेशन या DevOps के लिए सरल स्क्रिप्ट - एक गुणवत्तापूर्ण CLI फ्रेमवर्क के बिना काम नहीं चल सकता। इस लेख में हम तीन सबसे लोकप्रिय टूल का विश्लेषण करेंगे: Commander, Yargs और Inquirer। आप जानेंगे कि वे कैसे काम करते हैं, उनकी ताकत क्या है, और कोड उदाहरण देखेंगे।
CLI फ्रेमवर्क की आवश्यकता क्यों?
एक सरल कंसोल प्रोग्राम बिना फ्रेमवर्क के भी लिखा जा सकता है - बस process.argv को प्रोसेस करना पर्याप्त है। लेकिन जैसे-जैसे प्रोजेक्ट बढ़ता है, उप-कमांड, फ्लैग, इंटरैक्टिव संकेत दिखाई देते हैं - मैन्युअल आर्गुमेंट पार्सिंग नरक बन जाती है। फ्रेमवर्क यह कार्य संभालते हैं:
- आर्गुमेंट और विकल्पों का पार्सिंग;
- सहायता (
--help) का जनरेशन; - इनपुट डेटा का सत्यापन;
- उप-कमांड का समर्थन (जैसे
gitमें); - उपयोगकर्ता के साथ इंटरैक्टिव संवाद।
Commander — क्लासिक और मानक
Commander Node.js के लिए सबसे लोकप्रिय CLI फ्रेमवर्क है। इसका उपयोग Vue CLI, NestJS और कई अन्य जैसे दिग्गज करते हैं। मुख्य विशेषताएं: सहज API, स्वचालित सहायता आउटपुट, वेरिएटिव आर्गुमेंट का समर्थन।
सरल एप्लिकेशन का उदाहरण:
#!/usr/bin/env nodeconst { Command } = require('commander');const program = new Command();
program .name('greet') .description('उपयोगकर्ता का अभिवादन') .version('1.0.0');
program .command('hello') .argument('<name>', 'उपयोगकर्ता का नाम') .option('-l, --lang <language>', 'अभिवादन की भाषा', 'hi') .action((name, options) => { if (options.lang === 'hi') { console.log(`नमस्ते, ${name}!`); } else { console.log(`Hello, ${name}!`); } });
program.parse();चलाएं: node app.js hello राम --lang hi → नमस्ते, राम!
Commander स्वचालित रूप से --help के लिए सहायता उत्पन्न करता है और चेन कॉल का समर्थन करता है। यह अधिकांश CLI उपयोगिताओं के लिए आदर्श विकल्प है।
Yargs — लचीलापन और सुविधा
Yargs एक और शक्तिशाली फ्रेमवर्क है, जो विशेष रूप से जटिल विकल्पों को पार्स करने और प्रकारों के स्वचालित निर्धारण में मजबूत है। यह डेवलपर्स के बीच लोकप्रिय है जिन्हें आर्गुमेंट पर सूक्ष्म नियंत्रण की आवश्यकता होती है।
Yargs के साथ उदाहरण:
#!/usr/bin/env nodeconst yargs = require('yargs/yargs');const { hideBin } = require('yargs/helpers');
const argv = yargs(hideBin(process.argv)) .command('calc', 'कैलकुलेटर', (yargs) => { return yargs .option('a', { describe: 'पहली संख्या', type: 'number', demandOption: true }) .option('b', { describe: 'दूसरी संख्या', type: 'number', demandOption: true }) .option('op', { describe: 'ऑपरेशन (sum, sub)', type: 'string', default: 'sum' }); }, (argv) => { const { a, b, op } = argv; if (op === 'sum') console.log(`योग: ${a + b}`); else if (op === 'sub') console.log(`अंतर: ${a - b}`); else console.log('अज्ञात ऑपरेशन'); }) .demandCommand(1, 'कमांड निर्दिष्ट करें') .help() .argv;Yargs स्वचालित रूप से स्ट्रिंग को संख्याओं, बूलियन मानों और यहां तक कि ऐरे में बदल सकता है। इसकी शक्तिशाली middleware प्रणाली सभी कमांड के लिए सामान्य जांच जोड़ने की अनुमति देती है।
Inquirer — टर्मिनल में इंटरैक्टिविटी
Inquirer वास्तव में CLI के लिए फ्रेमवर्क नहीं है, बल्कि इंटरैक्टिव कंसोल इंटरफेस बनाने के लिए एक लाइब्रेरी है। यह Commander या Yargs को पूरी तरह से पूरक करता है जब चयन, टेक्स्ट इनपुट, चेकबॉक्स के साथ प्रश्नों की आवश्यकता होती है।
इंटरैक्टिव सर्वेक्षण का उदाहरण:
const inquirer = require('inquirer');
async function main() { const answers = await inquirer.prompt([ { type: 'inp