macOS पर, पहले यह पहचानें कि npm किसी Git मर्ज टकराव, package.json और package-lock.json के बीच बेमेल (mismatch), या पीयर डिपेंडेंसी रिज़ॉल्यूशन त्रुटि की रिपोर्ट कर रहा है या नहीं। कुछ भी बदलने से पहले Terminal में प्रोजेक्ट फ़ाइलों, Git स्थिति और npm संस्करणों की जाँच करें। यदि केवल लॉकफ़ाइल का समाधान (reconcile) करना आवश्यक है, तो npm का --package-lock-only विकल्प node_modules में पैकेजों को दोबारा इंस्टॉल किए बिना इसे अपडेट कर सकता है।
प्रोजेक्ट फ़ोल्डर से शुरू करें और वर्तमान स्थिति को सुरक्षित रखें
Terminal खोलें, प्रोजेक्ट डायरेक्टरी में जाएँ, और पुष्टि करें कि आप इच्छित प्रोजेक्ट रूट पर हैं। Finder में, आप फ़ोल्डर का पता लगा सकते हैं, फिर Terminal के cd कमांड का उपयोग कर सकते हैं; यदि पाथ में रिक्त स्थान (spaces) हैं, तो पाथ को कोट्स में रखें, उदाहरण के लिए cd "$HOME/Projects/My App"। चलाएँ:
pwd
git status --short
node --version
npm --version
git status --short यह दिखाता है कि क्या किसी भी मैनिफ़ेस्ट में अप्रतिबद्ध (uncommitted) संपादन हैं। यदि ऐसे परिवर्तन हैं जिन्हें आपको रखना है, तो आगे बढ़ने से पहले उन्हें सहेजें या कमिट करें; जब तक आप यह तय कर रहे हों कि कौन से डिपेंडेंसी परिवर्तन आवश्यक हैं, तब तक फ़ाइलों को ओवरराइट न करें। Node.js और npm संस्करणों को नोट कर लें ताकि आप प्रोजेक्ट के दस्तावेजी सेटअप या निरंतर एकीकरण (CI) कॉन्फ़िगरेशन के साथ उनकी तुलना कर सकें। प्रमुख npm संस्करणों में npm लॉकफ़ाइल प्रारूप बदले हैं, इसलिए प्रारूप का अंतर बिना यह साबित किए कि डिपेंडेंसी स्वयं खराब हैं, अप्रत्याशित परिवर्तनों (churn) को स्पष्ट कर सकता है। npm का package-lock दस्तावेज़
निर्धारित करें कि आपके पास किस प्रकार का टकराव है
यदि package-lock.json में <<<<<<<, =======, या >>>>>>> जैसे Git मार्कर शामिल हैं, तो यह एक सोर्स कंट्रोल मर्ज टकराव है। पूर्ण प्रभावित अनुभागों का निरीक्षण करें और दोनों ब्रांच के परिवर्तनों की तुलना करें। पहले package.json में डिपेंडेंसी घोषणाओं का समाधान करें: npm का पुराना लॉकफ़ाइल टकराव मार्गदर्शन स्पष्ट रूप से कहता है कि लॉकफ़ाइल को पुनर्जीवित (regenerate) करने से पहले मैनिफ़ेस्ट टकरावों को मैन्युअल रूप से हल करें। आदतवश लॉकफ़ाइल के केवल एक पक्ष को ही न रखें; प्रत्येक ब्रांच ने डिपेंडेंसी जोड़ी या बदली हो सकती हैं। npm का package-lock टकराव मार्गदर्शन
यदि कोई Git मार्कर नहीं हैं, तो package.json में डिपेंडेंसी नामों और श्रेणियों (ranges) की तुलना लॉकफ़ाइल से करें। package.json स्वीकार्य श्रेणियां निर्दिष्ट करता है, जबकि लॉकफ़ाइल एक हल किए गए डिपेंडेंसी ट्री को रिकॉर्ड करती है। वर्तमान npm दस्तावेज़ीकरण कहता है कि एक सामान्य npm install लॉक किए गए संस्करणों का उपयोग करता है जब वे मैनिफ़ेस्ट श्रेणियों को संतुष्ट करते हैं और जब वे ऐसा नहीं करते हैं तो लॉक को अपडेट करता है। lockfile का npm install कैसे उपयोग करता है
यदि कमांड किसी पीयर डिपेंडेंसी संदेश के साथ विफल हो जाता है, तो उस त्रुटि में नामित पैकेजों और उनकी पीयर आवश्यकताओं पर ध्यान केंद्रित करें। यह घोषित पैकेज श्रेणियों के बीच एक मान्य असंगति हो सकती है, न कि कोई दूषित इंस्टॉलेशन। नैदानिक शॉर्टकट के रूप में --force या --legacy-peer-deps का उपयोग न करें: डिपेंडेंसी रिज़ॉल्यूशन व्यवहार को बदलने से एक ऐसा ट्री उत्पन्न हो सकता है जो प्रोजेक्ट के इच्छित सेटअप से भिन्न हो।
npm को समाधान के लिए कहने से पहले परिवर्तन का निरीक्षण करें
प्रोजेक्ट के इतिहास और वर्तमान अंतर (diff) की समीक्षा करें:
git diff -- package.json package-lock.json
git log -5 --oneline -- package.json package-lock.json
उस कमिट या ब्रांच को देखें जिसने डिपेंडेंसी घोषणा, लॉकफ़ाइल संस्करण, या npm कॉन्फ़िगरेशन को बदल दिया है। यह भी जाँचें कि क्या प्रोजेक्ट में .npmrc है; npm स्पष्ट करता है कि legacy-peer-deps या install-links जैसे ट्री-आकार देने वाले विकल्प यह प्रभावित कर सकते हैं कि कोई लॉकफ़ाइल और बाद का क्लीन इंस्टॉल मेल खाते हैं या नहीं। बिना सोचे-समझे नए फ़्लैग जोड़ने के बजाय रिपॉजिटरी द्वारा पहले से अपनाई गई समान प्रोजेक्ट-विशिष्ट सेटिंग्स का उपयोग करें। npm ci दस्तावेज़
lockfileVersion मान फ़ाइल प्रारूप की पहचान करने में मदद करता है, लेकिन इसे अकेले एक निदान मानने से बचें। npm प्रारूप संस्करण 1, 2 और 3 का दस्तावेजीकरण करता है और नोट करता है कि नए npm संस्करण पुरानी लॉकफ़ाइलों को अपडेट कर सकते हैं। बदला हुआ संस्करण npm अनुकूलता व्यवहार को दर्शा सकता है; बड़े रीराइट को स्वीकार करने से पहले वास्तविक डिपेंडेंसी अंतर (diff) का निरीक्षण करें। लॉकफ़ाइल प्रारूप और पुरानी फ़ाइलें
डिपेंडेंसी को दोबारा इंस्टॉल किए बिना लॉकफ़ाइल का समाधान करें
किसी भी टकराव मार्कर को हल करने और package.json को सही करने के बाद, npm से केवल लॉकफ़ाइल को अपडेट करने के लिए कहें:
npm install --package-lock-only
npm इस विकल्प को node_modules की जाँच किए बिना या डिपेंडेंसी डाउनलोड किए बिना package-lock.json को अपडेट करने के रूप में प्रलेखित करता है। यह एक केंद्रित समाधान कदम है; यह इस बात की गारंटी नहीं देता कि परिणामी डिपेंडेंसी सेट वही है जो आप चाहते थे, इसलिए बाद में अंतर (diff) की जांच करें। npm install विकल्प
git diff --check
git diff -- package.json package-lock.json
git status --short
git diff --check व्हाइटस्पेस त्रुटियों को पकड़ने में मदद करता है, जबकि diff स्वयं दिखाता है कि npm ने क्या बदला है। पुष्टि करें कि मैनिफ़ेस्ट में अनपेक्षित संपादन शामिल नहीं हुए हैं, अप्रत्याशित संस्करण परिवर्तनों या व्यापक लॉकफ़ाइल पुनर्लेखन (rewrite) का निरीक्षण करें, और सत्यापित करें कि टकराव मार्कर हटा दिए गए हैं। यदि प्रस्तावित परिवर्तन समझ में नहीं आते हैं, तो node_modules को हटाने या सब कुछ पुनर्जीवित करने के बजाय अपनी सहेजी गई स्थिति या सोर्स कंट्रोल से फ़ाइलों को पुनर्स्थापित करें और कारण की पुन: समीक्षा करें।
जानें कि क्लीन इंस्टॉल कब उचित है
npm ci का उपयोग केवल तभी करें जब मैनिफ़ेस्ट और लॉकफ़ाइल जानबूझकर संरेखित (aligned) हों और आप लॉक किए गए डिपेंडेंसी ट्री को दोबारा प्रस्तुत करना चाहते हों। इसके लिए एक लॉकफ़ाइल की आवश्यकता होती है, यह बेमेल होने पर अपडेट करने के बजाय विफल हो जाता है, और इंस्टॉल करने से पहले मौजूदा node_modules डायरेक्टरी को हटा देता है। यह इसे हल की गई स्थिति की पुष्टि करने के लिए उपयोगी बनाता है, लेकिन यह एक हानिरहित निरीक्षण कमांड नहीं है। npm ci व्यवहार
यदि npm install --package-lock-only टकराव को हल नहीं कर सकता है, तो उसकी सटीक त्रुटि देखें, नामित पैकेज श्रेणियों और प्रोजेक्ट npm सेटिंग्स की समीक्षा करें, और उस ब्रांच या CI वातावरण के साथ तुलना करें जिसने लॉकफ़ाइल बनाई थी। निर्णायक प्रश्न यह है कि प्रोजेक्ट को कौन सी डिपेंडेंसी घोषणाएं रखनी चाहिए; इंस्टॉलेशन क्लीनअप आपके लिए इसका उत्तर नहीं दे सकता है। एक बार जब वह निर्णय package.json में परिलक्षित हो जाता है, तो केवल लॉकफ़ाइल को पुनर्जीवित करें, प्रस्तावित परिवर्तन का निरीक्षण करें, और फिर चुनें कि क्या क्लीन इंस्टॉल आवश्यक है।
स्रोत
npm install — npm
npm ci — npm
package-lock.json — npm
package-locks — npm