macOS पर npm वर्कस्पेस प्रोजेक्ट में किसी एक पैकेज के लिए डिपेंडेंसीज़ इंस्टॉल करने के लिए, प्रोजेक्ट रूट से npm install --workspace="packages/web" चलाएं, और packages/web को वर्कस्पेस के पाथ या उसके पैकेज नाम से बदलें। आप उस वर्कस्पेस डायरेक्टरी में जाकर भी npm install चला सकते हैं। ये कमांड npm प्रोजेक्ट में एक वर्कस्पेस चुनते हैं; वे कोई अलग इंस्टॉलेशन डायरेक्टरी नहीं बनाते हैं या यह गारंटी नहीं देते कि केवल उसी पैकेज की फ़ाइलें बदलेंगी।
जांचें कि प्रोजेक्ट एक npm वर्कस्पेस है
एक npm वर्कस्पेस रूट package.json में workspaces के तहत सूचीबद्ध एक पैकेज डायरेक्टरी होती है। उदाहरण के लिए, एक रिपॉजिटरी में रूट package.json और एक packages/web/package.json हो सकता है, जिसमें रूट की वर्कस्पेस सूची में "packages/*" शामिल हो। npm इस कॉन्फ़िगरेशन का उपयोग स्थानीय पैकेजों को पहचानने और लिंक करने के लिए करता है। यदि फ़ोल्डर को वर्कस्पेस के रूप में कॉन्फ़िगर नहीं किया गया है, तो --workspace इसे टारगेट नहीं कर सकता है। npm का workspaces documentation देखें।
Terminal में, रिपॉजिटरी रूट पर जाएं। macOS पर, ऐसे पाथ जिनमें स्पेस हों, उन्हें कोट्स (quotes) में रखें ताकि शेल उस पाथ को एक ही तर्क (argument) के रूप में माने:
cd "$HOME/Projects/sample monorepo"
npm install --workspace="packages/web"
यहाँ, packages/web रिपॉजिटरी रूट के सापेक्ष एक उदाहरण पाथ है। आप इसके बजाय कॉन्फ़िगर किए गए वर्कस्पेस के पैकेज नाम का उपयोग कर सकते हैं, जैसे कि npm install --workspace="@example/web"। npm वर्कस्पेस के नामों, वर्कस्पेस डायरेक्टरी पाथ्स और पैरेंट वर्कस्पेस पाथ्स को मान्य चयनकर्ता (selectors) के रूप में प्रलेखित करता है। विशिष्ट पैकेज पाथ या नाम को प्राथमिकता दें: किसी पैरेंट वर्कस्पेस डायरेक्टरी का चयन करने से उसके अंतर्गत आने वाले प्रत्येक वर्कस्पेस का चयन हो सकता है। npm के npm install विकल्प इस चयनकर्ता का विवरण देते हैं।
चयनित वर्कस्पेस की घोषित डिपेंडेंसीज़ इंस्टॉल करें
ऊपर दिया गया कमांड चयनित वर्कस्पेस के संदर्भ में इंस्टॉल चलाता है। install के बाद कोई पैकेज नाम न होने पर, npm प्रोजेक्ट मेनिफ़ेस्ट में पहले से घोषित डिपेंडेंसीज़ को इंस्टॉल करता है; यह packages/web/package.json में कोई नई डिपेंडेंसी नहीं जोड़ता है। जब कोई अलग वर्कस्पेस चुना जाता है, तो npm का वर्कस्पेस कॉन्फ़िगरेशन डिफ़ॉल्ट रूप से रूट प्रोजेक्ट को बाहर रखता है, जब तक कि include-workspace-root सक्षम न हो। npm कॉन्फ़िगरेशन संदर्भ दोनों विकल्पों का विवरण देता है।
जिस पैकेज को आप जोड़ना चाहते हैं, उसका नाम वर्कस्पेस चयनकर्ता से पहले शामिल करें:
npm install date-fns --workspace="packages/web"
यह npm को उस वर्कस्पेस की डिपेंडेंसीज़ में date-fns जोड़ने और इसे इंस्टॉल करने का निर्देश देता है। यह पुष्टि करने के लिए कि डिपेंडेंसी वहीं दर्ज की गई है जहाँ आप चाहते थे, बाद में वर्कस्पेस की package.json की जांच करें। npm की वर्कस्पेस गाइड किसी नामित वर्कस्पेस में डिपेंडेंसी जोड़ने के लिए यही पैटर्न प्रदान करती है।
इसके बजाय वर्कस्पेस डायरेक्टरी का उपयोग करें
यदि आप पहले से ही पैकेज फ़ोल्डर में काम कर रहे हैं, तो आप --workspace निर्दिष्ट करने के बजाय वहीं npm install चला सकते हैं:
cd "$HOME/Projects/sample monorepo/packages/web"
npm install
npm यह प्रलेखित करता है कि किसी वर्कस्पेस के अंदर से कमांड चलाने पर वर्कस्पेस संदर्भ अपने आप सेट हो जाता है और प्रोजेक्ट प्रीफ़िक्स के रूप में वर्कस्पेस रूट का उपयोग होता है। किसी एक पैकेज के लिए समर्पित टर्मिनल टैब में यह सुविधाजनक हो सकता है। यदि आप सुनिश्चित नहीं हैं कि वर्तमान डायरेक्टरी किस पैकेज से संबंधित है, तो ज्ञात रिपॉजिटरी रूट से स्पष्ट रूप से --workspace कमांड का उपयोग करें।
समझें कि “एक वर्कस्पेस” का क्या अर्थ है और क्या नहीं
किसी एक वर्कस्पेस का चयन करने से कमांड का वर्कस्पेस संदर्भ सीमित हो जाता है; यह भौतिक रूप से अलग node_modules ट्री का वादा नहीं करता है। npm वर्कस्पेस को टॉप-लेवल प्रोजेक्ट से प्रबंधित किया जाता है, और npm स्थानीय वर्कस्पेस को रूट node_modules डायरेक्टरी में लिंक कर सकता है। जहाँ भी डिपेंडेंसी ट्री अनुमति देता है, डिपेंडेंसीज़ को होइस्ट (hoist) या साझा किया जा सकता है। इसलिए इंस्टॉलेशन रिपॉजिटरी की साझा इंस्टॉलेशन स्थिति और लॉकफ़ाइल को प्रभावित कर सकता है। वर्शन कंट्रोल में परिणामी परिवर्तनों की समीक्षा करें, विशेष रूप से यदि आपने केवल पैकेज-स्तरीय फ़ाइल सिस्टम परिवर्तन की अपेक्षा की थी। npm का इंस्टॉलेशन दस्तावेज़ इसके डिपेंडेंसी-ट्री व्यवहार और वर्कस्पेस लिंकिंग की व्याख्या करता है।
यदि आपका लक्ष्य मोनोरेपो से पूरी तरह से अलग एक स्टैंडअलोन इंस्टॉलेशन है, तो वर्कस्पेस चयनकर्ता इसका साधन नहीं है। वर्कस्पेस कॉन्फ़िगर किए गए रूट प्रोजेक्ट का एक हिस्सा होता है; इसे टारगेट करने से यह किसी स्वतंत्र रिपॉजिटरी या इंस्टॉल ट्री में नहीं बदल जाता है।
यदि npm टारगेट को नहीं पहचानता है
सबसे पहले सत्यापित करें कि पाथ रिपॉजिटरी रूट के सापेक्ष सही है और इसकी package.json मौजूद है। फिर रूट package.json का निरीक्षण करें और पुष्टि करें कि इसके workspaces पैटर्न में वह फ़ोल्डर शामिल है। यदि नाम का उपयोग कर रहे हैं, तो पुष्टि करें कि यह वर्कस्पेस पैकेज के name फ़ील्ड से मेल खाता है। कमांड को रिपॉजिटरी रूट से चलाएं, या सीधे अभीष्ट वर्कस्पेस डायरेक्टरी में जाएं। जब आप केवल एक पैकेज चाहते हों तो --workspaces से बचें: यह बहुवचन विकल्प सभी कॉन्फ़िगर किए गए वर्कस्पेस का चयन करता है। व्यावहारिक नियम सरल है: जब आप एक स्पष्ट टारगेट चाहते हैं तो रूट से --workspace="path" का उपयोग करें, और npm पूरा होने के बाद मेनिफ़ेस्ट और रिपॉजिटरी परिवर्तनों को सत्यापित करें।
स्रोत
- npm-install — npm Docs
- Workspaces — npm Docs
- Config — npm Docs