यह जाँचने के लिए कि कोई शेयर्ड npm वर्कस्पेस पैकेज वास्तव में क्या डिलीवर करेगा, उसके परीक्षणों (tests) को मोनोरेपो से चलाएँ, वर्कस्पेस को पैक करें, और फिर उस टारबॉल (tarball) को अपने Mac पर एक अलग अस्थायी कंज़्यूमर डायरेक्टरी में इंस्टॉल करें। यह npm के लोकल वर्कस्पेस सिमिलिंक (symlink) द्वारा छिपी समस्याओं को पकड़ता है, जैसे कि बिल्ड की गई अनुपलब्ध फाइलें या पैकेज का गलत एंट्री पॉइंट। यह किसी रजिस्ट्री में कुछ भी प्रकाशित नहीं करता है।
1. वर्कस्पेस रूट से पैकेज के स्वयं के परीक्षण चलाएँ
टर्मिनल खोलें और मोनोरेपो रूट में जाएँ—वह डायरेक्टरी जिसमें रूट package.json शामिल है। पुष्टि करें कि पैकेज रूट workspaces कॉन्फ़िगरेशन में दिखाई देता है और उसका अपना package.json है। npm कॉन्फ़िगर किए गए वर्कस्पेस को रूट node_modules में लिंक के रूप में इंस्टॉल करता है, इसलिए वहाँ चलाया गया परीक्षण लाइव वर्कस्पेस सोर्स को रिज़ॉल्व कर सकता है। वर्कस्पेस विकल्प आपको किसी पैकेज को उसके घोषित नाम या डायरेक्टरी द्वारा लक्षित करने की अनुमति देता है। npm Workspaces
पैकेज के package.json से नाम बदलते हुए, उसके वर्कस्पेस नाम द्वारा पैकेज की टेस्ट स्क्रिप्ट चलाएँ:
npm run test --workspace=@acme/math
यदि पैकेज किसी भिन्न स्क्रिप्ट नाम का उपयोग करता है, तो उस नाम का उपयोग करें। यदि इसमें कोई टेस्ट स्क्रिप्ट नहीं है, तो यह कमांड इसके व्यवहार का परीक्षण नहीं कर सकती है; उन जाँचों को चलाएँ जिन्हें प्रोजेक्ट वास्तव में परिभाषित करता है, जैसे कि इसके बिल्ड या लिंट स्क्रिप्ट। केवल रूट-स्तरीय टेस्ट कमांड पर निर्भर रहने से बचें: test जैसे npm कमांड रूट पर काम करते हैं जब तक कि आप कोई वर्कस्पेस नहीं चुनते। npm Workspaces
2. पैकेज टारबॉल की समीक्षा करें और उसे बनाएँ
लोकल वर्कस्पेस परीक्षण यह साबित नहीं करता है कि उपभोक्ताओं (consumers) के लिए आवश्यक फाइलें पैकेज में शामिल हैं। पहले मोनोरेपो रूट से चयनित वर्कस्पेस की पैकेज सामग्री का पूर्वावलोकन (preview) करें:
npm pack --workspace=@acme/math --dry-run
पैकेज एंट्री पॉइंट, बिल्ट आउटपुट, टाइप डिक्लेरेशन, और पैकेज द्वारा वादा की गई किसी भी अन्य फाइल के लिए फाइल सूची की समीक्षा करें। npm की files, .npmignore, और .gitignore सेटिंग्स सामग्री को प्रभावित करती हैं; package.json, README और लाइसेंस फाइलें उन फाइलों में शामिल हैं जिन्हें npm डिफ़ॉल्ट रूप से शामिल करता है। जाँचें कि main या exports उन फाइलों को इंगित करते हैं जो आर्काइव में होंगी। npm pack, package.json files and entry points
जब सूची सही दिखे, तो एक अस्थायी डायरेक्टरी में एक वास्तविक टारबॉल बनाएँ। निम्नलिखित कमांड macOS के डिफ़ॉल्ट zsh-कम्पैटिबल कोटिंग का उपयोग करते हैं और आर्टिफ़ैक्ट को आपके रिपॉजिटरी से बाहर रखते हैं:
scratch="$(mktemp -d "${TMPDIR:-/tmp}/workspace-package-check.XXXXXX")"
npm pack --workspace=@acme/math --pack-destination="$scratch"
--dry-run केवल रिपोर्ट करता है कि npm क्या पैक करेगा; यह आर्काइव नहीं बनाता है। दूसरा कमांड आर्काइव बनाता है, लेकिन इसे अपलोड नहीं करता है। npm का दस्तावेज़ीकरण npm pack को टारबॉल बनाने के रूप में वर्णित करता है और वर्कस्पेस चयनकर्ता को पहचानता है। npm pack
3. आर्काइव को एक साफ़ कंज़्यूमर फ़ोल्डर में इंस्टॉल करें
टारबॉल पाथ खोजें, एक अलग कंज़्यूमर डायरेक्टरी बनाएँ, और आर्काइव को वहाँ इंस्टॉल करें। यह उदाहरण मानता है कि अस्थायी डायरेक्टरी में केवल एक टारबॉल पैक किया गया था:
tarball="$(find "$scratch" -maxdepth 1 -name '*.tgz' -print -quit)"
consumer="$scratch/consumer"
mkdir -p "$consumer"
cd "$consumer"
npm init -y
npm install "$tarball"
.tgz को इंस्टॉल करना पैक किए गए आर्टिफ़ैक्ट का परीक्षण करता है। वर्कस्पेस फ़ोल्डर इंस्टॉल करना या मोनोरेपो की लिंक्ड डिपेंडेंसी का उपयोग करना भिन्न व्यवहार कर सकता है। npm install
अब इसके सार्वजनिक एंट्री पॉइंट के माध्यम से पैकेज का परीक्षण करें। पैकेज के वास्तविक नाम और इसके API के अनुकूल एक छोटे कंज़्यूमर चेक का उपयोग करें—उदाहरण के लिए, इसे require या import करें, फिर किसी प्रतिनिधि एक्सपोर्ट किए गए फ़ंक्शन को कॉल करें। उस चेक को कंज़्यूमर डायरेक्टरी से चलाएँ, जहाँ पैकेज हाल ही में इंस्टॉल किए गए node_modules से रिज़ॉल्व होता है। यदि प्रोजेक्ट कंपाइल किए गए आउटपुट को प्रकाशित करता है, तो सत्यापित करें कि पैकिंग से पहले बिल्ड चला है; अन्यथा आर्काइव में फाइलें गायब हो सकती हैं, भले ही डेवलपमेंट-टाइम परीक्षण पास हो गए हों।
4. प्रकाशित करने से पहले विफलताओं का निदान करें
यदि इंस्टॉलेशन विफल हो जाता है, तो जाँचें कि क्या आर्काइव में name और version के साथ एक package.json है, फिर इसकी फाइल सूची का निरीक्षण करें और पुष्टि करें कि कॉन्फ़िगर किए गए एंट्री पॉइंट टारबॉल में मौजूद हैं। यदि इम्पोर्ट विफल हो जाता है, तो कंज़्यूमर के मॉड्यूल फॉर्मेट की तुलना पैकेज की type, main, और exports सेटिंग्स से करें। एक पैकेज वर्कस्पेस परीक्षणों को पास कर सकता है लेकिन फिर भी यहाँ विफल हो सकता है क्योंकि वे परीक्षण सीधे सोर्स फाइलों को लोड कर सकते हैं या मोनोरेपो से अघोषित डिपेंडेंसीज़ को रिज़ॉल्व कर सकते हैं।
यदि कोई डिपेंडेंसी एक अन्य अप्रकाशित वर्कस्पेस है, तो लक्षित रिलीज़ व्यवस्था का भी परीक्षण करें। एक टारबॉल इंस्टॉल करने वाले कंज़्यूमर को मोनोरेपो लिंक के माध्यम से सिबलिंग वर्कस्पेस सोर्स अपने आप प्राप्त नहीं होगा। सुनिश्चित करें कि सिबलिंग पैकेज संगत संस्करणों पर प्रकाशित/उपलब्ध हैं, या किसी योजनाबद्ध बंडल या इंस्टॉल करने योग्य सेटअप का उपयोग करें। यह प्रक्रिया वर्तमान Mac/Node परिवेश में एक स्थानीय पैक किए गए पैकेज को सत्यापित करती है; यह हर Node संस्करण, ऑपरेटिंग सिस्टम, या रजिस्ट्री कॉन्फ़िगरेशन पर व्यवहार स्थापित नहीं कर सकती है।
उपयोगी ठहराव बिंदु एक सफल वर्कस्पेस टेस्ट, एक उचित पैकेज फाइल सूची, और एक कंज़्यूमर चेक है जो मोनोरेपो के बाहर से टारबॉल को इंस्टॉल करता है और चलाता है। यदि आपको इसका निरीक्षण करने की आवश्यकता है तो अस्थायी डायरेक्टरी रखें, या यह पुष्टि करने के बाद कि वेरिएबल अभी भी जनरेट किए गए अस्थायी पाथ को संदर्भित करता है, इसे rm -rf "$scratch" से हटा दें।
स्रोत
Workspaces — npm
npm pack — npm
npm install — npm