इस प्रोजेक्ट के बारे में

ncc Vercel द्वारा बनाए रखा गया एक कमांड-लाइन टूल है जो Node.js प्रोग्राम को उसकी सभी डिपेंडेंसी के साथ एक ही आउटपुट फाइल में बंडल करता है, gcc-शैली कंपाइलेशन की भावना में। इसका डिज़ाइन लक्ष्य zero-config है: इसे एक एंट्री फाइल पर इंगित करें और यह एक कॉम्पैक्ट बिल्ड तैयार करता है, जिसमें tsconfig.json मौजूद होने पर TypeScript को मूल रूप से संभाला जाता है। प्राथमिक कमांड हैं `build` (एक बंडल फाइल को आउटपुट डायरेक्टरी में एमिट करें, डिफ़ॉल्ट रूप से `dist/index.js`), `run` (एक अस्थायी डायरेक्टरी में बिल्ड करें और परीक्षण और डिबगिंग के लिए पूर्ण source-map सपोर्ट के साथ निष्पादित करें), और `cache` (बिल्ड कैश को साफ़, निरीक्षण या आकार दें)। विकल्प सामान्य बंडलिंग आवश्यकताओं को कवर करते हैं: `--minify`, `--source-map`, विशिष्ट मॉड्यूल को बंडल करने से छोड़ने के लिए `--external`, वृद्धिशील रीबिल्ड के लिए `--watch`, ECMAScript आउटपुट स्तर सेट करने के लिए `--target`, V8 कंपाइल कैश एमिट करने के लिए `--v8-cache`, लाइसेंसिंग जानकारी संलग्न करने के लिए `--license`, webpack स्टैट्स को JSON के रूप में डंप करने के लिए `--stats-out`, और वर्कर स्क्रिप्ट जैसी नेस्टेड JS एसेट्स को पुनरावर्ती रूप से बंडल करने के लिए `--asset-builds`। मॉड्यूल प्रारूप इनपुट से अनुमानित किया जाता है, इसलिए `.mjs` इनपुट या `"type": "module"` पैकेज सीमा के अंदर की फाइलें ES मॉड्यूल आउटपुट उत्पन्न करती हैं, जबकि `.cjs` इनपुट CommonJS एक्सटेंशन को संरक्षित करते हैं। CLI के अलावा, ncc Node.js से एक प्रोग्रामेटिक API उजागर करता है। इनपुट पथ और एक विकल्प ऑब्जेक्ट के साथ `require('@vercel/ncc')` को कॉल करने से `{ code, map, assets }` को हल करने वाला एक प्रॉमिस लौटता है, जहां assets फाइल नामों का उनके स्रोत, अनुमतियों और सिमलिंक मेटाडेटा के लिए एक मैप है। विकल्प CLI फ्लैग को दर्शाते हैं, जिसमें कस्टम कैश पथ, externals, minification, source maps, watch मोड, लाइसेंस जनरेशन और लक्ष्य चयन शामिल हैं। Watch मोड में लौटाया गया ऑब्जेक्ट प्रॉमिस के बजाय `handler`, `rebuild` और `close` कॉलबैक उजागर करता है। परियोजना के बताए गए उद्देश्य न्यूनतम npm पैकेज प्रकाशित करना, serverless वातावरण में केवल प्रासंगिक कोड भेजना, बंडलर कॉन्फ़िगरेशन ओवरहेड से बचना और बूट समय और I/O में सुधार करना है। यह इनपुट और आउटपुट दोनों के रूप में Node.js प्रोग्राम को लक्षित करता है और सभी Node.js पैटर्न और npm मॉड्यूल का समर्थन करने का लक्ष्य रखता है। एक प्रलेखित चेतावनी यह है कि फाइल और एसेट स्थानांतरण एक स्थिर मूल्यांकनकर्ता पर निर्भर करता है, इसलिए गतिशील रूप से लोड की गई एसेट्स जिनका स्थिर रूप से विश्लेषण नहीं किया जा सकता है, उन्हें सही ढंग से स्थानांतरित नहीं किया जा सकता है। कुछ पैकेजों को पूर्ण संगतता के लिए अतिरिक्त विकल्पों की आवश्यकता होती है, जिन्हें रिपॉजिटरी के पैकेज-सपोर्ट दस्तावेज़ीकरण में सूचीबद्ध किया गया है।