Mac पर npm पैकेजों में किसी डिपेंडेंसी को संरेखित करने के लिए, पहले प्रत्येक वर्कस्पेस की package.json में वर्ज़न सीमाओं की तुलना करें, तय करें कि कौन सी सामान्य वर्ज़न सीमा हर पैकेज के लिए उपयुक्त है, फिर प्रत्येक प्रभावित वर्कस्पेस को अपडेट करें और रूट लॉकफाइल को फिर से जनरेट करें। npm वर्कस्पेस रिपॉजिटरी रूट से पैकेजों को लक्षित कर सकते हैं, लेकिन वे ऐसा कोई अंतर्निहित कमांड प्रदान नहीं करते हैं जो हर मैनिफेस्ट को स्कैन करे और स्वचालित रूप से डिपेंडेंसी वर्ज़न को एक समान बना दे।
1. जांचें कि रिपॉजिटरी npm वर्कस्पेस का उपयोग करती है या नहीं
Terminal में, रिपॉजिटरी रूट पर जाएं और इसके कॉन्फ़िगरेशन का निरीक्षण करें:
cd "/path/to/your/repository"
npm --version
npm pkg get workspaces
रूट package.json को वर्कस्पेस पाथ परिभाषित करने चाहिए, और प्रत्येक पैकेज की अपनी package.json होनी चाहिए। npm का वर्कस्पेस फीचर इंस्टॉलेशन के दौरान उन स्थानीय पैकेजों को लिंक करता है और कमांड्स को नाम या पाथ के अनुसार एक या अधिक वर्कस्पेस को लक्षित करने की अनुमति देता है। यदि npm pkg get workspaces कुछ भी वापस नहीं करता है, तो npm वर्कस्पेस कमांड्स का उपयोग करने से पहले रिपॉजिटरी के पैकेज मैनेजर और लेआउट की पुष्टि करें। npm Workspaces
2. डिपेंडेंसी घोषणाओं की तुलना करें
जिस डिपेंडेंसी को आप संरेखित करना चाहते हैं, उसके लिए ट्रैक किए गए मैनिफेस्ट में खोजें। उदाहरण के लिए, macOS Terminal में आप कोई अतिरिक्त टूल इंस्टॉल किए बिना grep का उपयोग कर सकते हैं:
grep -n '"typescript"' package.json packages/*/package.json
typescript को डिपेंडेंसी के नाम से बदलें। यह एक त्वरित टेक्स्ट जांच है, इसलिए प्रत्येक मैनिफेस्ट में संबंधित अनुभागों की समीक्षा करके देखें कि पैकेज dependencies, devDependencies, peerDependencies, या optionalDependencies के अंतर्गत है या नहीं। ये फ़ील्ड अलग-अलग भूमिकाओं का वर्णन करते हैं; केवल वर्ज़न स्ट्रिंग्स को मेल खाने के लिए किसी डिपेंडेंसी को उनके बीच स्थानांतरित न करें। अधिक संपूर्ण इन्वेंट्री के लिए, अपने एडिटर में प्रत्येक वर्कस्पेस मैनिफेस्ट का निरीक्षण करें या npm के वर्कस्पेस-सजग लिस्टिंग कमांड का उपयोग करें:
npm ls typescript --workspaces --depth=0
मैनिफ़ेस्ट सीमाएं और इंस्टॉल किया गया ट्री अलग-अलग प्रश्नों के उत्तर देते हैं: पहला यह दिखाता है कि प्रत्येक पैकेज किसकी अनुमति देता है, जबकि npm ls इंस्टॉल की गई डिपेंडेंसी की स्थिति की रिपोर्ट करता है। npm की लॉकफ़ाइल रिज़ॉल्व किए गए वर्ज़न को रिकॉर्ड करती है, लेकिन यह प्रत्येक package.json में घोषित स्वीकार्य सीमाओं को प्रतिस्थापित नहीं करती है। npm ls package-lock.json and npm install
3. एक संगत वर्ज़न नीति चुनें
ऐसा वर्ज़न चुनें जो उपयोगकर्ताओं (कंज्यूमर्स) की आवश्यकताओं और रिपॉजिटरी की सपोर्ट नीति को पूरा करता हो। एक साझा वर्ज़न सीमा का अर्थ है कि पैकेज एक ही अनुमत सेट को व्यक्त करते हैं; यह गारंटी नहीं देता कि सभी नेस्टेड या ट्रांजिटिव प्रतियां एक ही इंस्टॉल की गई प्रति में रिज़ॉल्व होंगी। पैकेजों को किसी मेजर वर्ज़न में ले जाने से पहले ब्रेकिंग परिवर्तनों के लिए पीयर डिपेंडेंसी आवश्यकताओं और रिलीज़ नोट्स की जांच करें। यदि उपयोगकर्ताओं को व्यापक अनुकूलता सीमा की आवश्यकता है, तो बिल्कुल समान स्ट्रिंग से संरेखित करना अनुचित हो सकता है; इसके बजाय एक समतुल्य रेंज नीति पर सहमति बनाएं।
उदाहरण के लिए, web और api नाम के दो वर्कस्पेस में किसी डेवलपमेंट टूल को बिल्कुल समान वर्ज़न पर सेट करने के लिए, रूट से इसे चलाएं:
npm install --save-dev --save-exact typescript@5.8.3 --workspace=web --workspace=api
उस वर्ज़न का उपयोग करें जिसे आपके प्रोजेक्ट ने चुना है; यहाँ 5.8.3 केवल एक उदाहरण है। npm का install कमांड वर्कस्पेस सिलेक्टर्स को स्वीकार करता है और पैकेज को प्रत्येक चयनित पैकेज मैनिफेस्ट में सेव करता है। --save-exact npm के सामान्य रेंज ऑपरेटर के बजाय एक सटीक वर्ज़न लिखता है। रनटाइम डिपेंडेंसी के लिए, --save-dev के बजाय उपयुक्त सेव श्रेणी का उपयोग करें, जैसे --save-prod। npm install
अतिरिक्त वर्कस्पेस सिलेक्टर्स के साथ इसे दोहराएं या प्रत्येक वर्कस्पेस के लिए कमांड चलाएं। यह मानकर न चलें कि रूट-लेवल इंस्टॉल हर पैकेज मैनिफेस्ट को अपडेट कर देगा: उन पैकेजों को स्पष्ट रूप से लक्षित करें जिनकी घोषणाओं को बदलना है। जब रूट पैकेज को भी समान डिपेंडेंसी घोषित करनी हो, तो उसे --include-workspace-root के साथ जानबूझकर शामिल किया जा सकता है।
4. फिर से इंस्टॉल करें, diff का निरीक्षण करें, और सत्यापित करें
घोषणाओं को अपडेट करने के बाद, रिपॉजिटरी रूट पर इंस्टॉलेशन चलाएं ताकि npm वर्कस्पेस ट्री और लॉकफाइल का मिलान कर सके:
npm install
npm ls typescript --workspaces --depth=0
git diff -- package.json package-lock.json packages/*/package.json
जांचें कि प्रत्येक अभीष्ट मैनिफेस्ट में सहमत घोषणा है और लॉकफाइल परिवर्तन अपेक्षित है। रिपॉजिटरी की प्रासंगिक बिल्ड या टेस्ट स्क्रिप्ट चलाएं; केवल npm ls यह स्थापित नहीं करता कि कोड चयनित वर्ज़न के साथ काम करता है। जब प्रोजेक्ट रूट package-lock.json को ट्रैक करता है, तो उसे कमिट करें, ताकि टीम के सदस्य अपने इंस्टॉलेशन में उसी रिज़ॉल्व किए गए ट्री को दोबारा प्रस्तुत कर सकें। npm package-lock documentation
यदि npm किसी अमान्य डिपेंडेंसी या पीयर विरोध की रिपोर्ट करता है, तो इंस्टॉलेशन को ज़बरदस्ती करने के बजाय त्रुटि में नामित पैकेज का निरीक्षण करें। हो सकता है कि किसी वर्कस्पेस को एक अलग संगत सीमा की आवश्यकता हो, या कोई अन्य डिपेंडेंसी ऐसी पीयर आवश्यकता लगा सकती है जिसके लिए एक सुविचारित अपग्रेड योजना की आवश्यकता हो।
npm dedupe कब मदद करता है
npm dedupe संगत डिपेंडेंसी को ऊपर ले जाकर इंस्टॉल किए गए डिपेंडेंसी ट्री को सरल बना सकता है ताकि पैकेज उन्हें साझा कर सकें। यह package.json में डायरेक्ट डिपेंडेंसी सीमाओं को फिर से नहीं लिखता है, इसलिए यह अकेले घोषणाओं को संरेखित नहीं कर सकता है। इसका उपयोग केवल यह जांचने के बाद करें कि सीमाएं संगत हैं, और फिर परिणामी लॉकफाइल diff की समीक्षा करें। npm dedupe
एक विश्वसनीय समापन प्रत्येक प्रासंगिक वर्कस्पेस मैनिफेस्ट में व्यक्त एक सुविचारित नीति, एक पुनर्जीवित (रीजनरेट की गई) लॉकफाइल, और प्रभावित पैकेजों का सत्यापन है। इससे मेंटेनर्स को इस बात का स्पष्ट रिकॉर्ड मिलता है कि क्या संरेखित किया गया था और असंगत बाधाएं एक अलग निर्णय के लिए स्पष्ट रूप से दिखाई देती हैं।
स्रोत
Workspaces — npm
npm install — npm
npm ls — npm
package-lock.json — npm
npm-dedupe — npm