एनपीएम त्रुटि! ERESOLVE निर्भरता वृक्ष को हल करने में असमर्थ त्रुटि का अर्थ है कि एनपीएम को आपके प्रोजेक्ट में पैकेजों के बीच परस्पर विरोधी सहकर्मी निर्भरता आवश्यकताएँ मिलीं। एनपीएम 7+ ने सहकर्मी निर्भरता समाधान को सख्त बना दिया – एनपीएम 6 में एक दूसरे के साथ चुपचाप स्थापित किए गए पैकेज अब विफल हो गए हैं। यहां हर समाधान के बारे में बताया गया है।त्रुटि को समझना
📋 Table of Contents
- इस त्रुटि को पढ़ना:
- यह npm को v6 व्यवहार में बदल देता है – सहकर्मी निर्भरता टकराव को लागू किए बिना पैकेज स्थापित करता है। पैकेज नए सहकर्मी संस्करण के साथ ठीक काम कर सकता है, भले ही यह पुरानी रेंज की घोषणा करता हो।
- यह क्या करता है:
- यह सही समाधान है
- फ़ील्ड एनपीएम को नेस्टेड निर्भरता के एक विशिष्ट संस्करण को बाध्य करने के लिए कहता है। यह सबसे सही समाधान है – आप विरोध को चुपचाप अनदेखा करने के बजाय स्पष्ट रूप से कह रहे हैं "इस पैकेज के लिए भी रिएक्ट 18 का उपयोग करें"।
- रिएक्ट 18 संगतता के बारे में खुले मुद्दों के साथ 2+ साल पहले प्रकाशित एक पैकेज को संभवतः छोड़ दिया गया है। सक्रिय रखरखाव के साथ आधुनिक विकल्पों के लिए एनपीएम खोजें।
- अक्सर पूछे जाने वाले प्रश्न
- प्रश्न: क्या –legacy-peer-deps सुरक्षित है?
- उत्तर: आम तौर पर हां, विशेष रूप से जब संघर्ष सहकर्मी संस्करण श्रेणियों के रूढ़िवादी होने के बारे में होता है (उदाहरण के लिए, सहकर्मी प्रतिक्रिया 16-17 कहता है लेकिन 18 के साथ ठीक काम करता है)। इसे प्रयोग करने के बाद हमेशा परीक्षण करें। जोखिम सूक्ष्म रनटाइम असंगतताएं हैं जो केवल किनारे के मामलों में दिखाई देती हैं।
- (1) परस्पर विरोधी पैकेज को ऐसे संस्करण में अपग्रेड करना जो आपके फ्रेमवर्क संस्करण का समर्थन करता है, (2)
इस त्रुटि को पढ़ना:
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR!
npm ERR! While resolving: my-app@1.0.0
npm ERR! Found: react@18.3.1
npm ERR! node_modules/react
npm ERR! react@"^18.0.0" from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer react@"^16.8.0 || ^17.0.0" from some-old-package@2.1.0
npm ERR! node_modules/some-old-package
आपका प्रोजेक्ट रिएक्ट 18 का उपयोग करता है। सहकर्मी निर्भरता के रूप में रिएक्ट 16 या 17 की आवश्यकता है। npm इंस्टॉल करने से इंकार कर देता है क्योंकि वह इसे एक विरोध के रूप में देखता है।some-old-packageसमाधान 1: –legacy-peer-deps (सबसे सुरक्षित त्वरित समाधान)
यह npm को v6 व्यवहार में बदल देता है – सहकर्मी निर्भरता टकराव को लागू किए बिना पैकेज स्थापित करता है। पैकेज नए सहकर्मी संस्करण के साथ ठीक काम कर सकता है, भले ही यह पुरानी रेंज की घोषणा करता हो।
npm install --legacy-peer-deps
कब उपयोग करें:
जब आपने संयोजन कार्यों का परीक्षण किया है, तो पैकेज को नए रिएक्ट/व्यू/एंगुलर पीयर संस्करण घोषित करने के लिए अपडेट नहीं किया गया है, और आपको भरोसा है कि निर्भरता वास्तव में नहीं टूटेगी।भविष्य के सभी इंस्टालेशन के लिए बने रहें:
समाधान 2: –बल (अंतिम उपाय)
# .npmrc file (commit this to repo)
legacy-peer-deps=true
यह क्या करता है:
npm install --force
विरोधाभासी संस्करणों के साथ भी इंस्टॉलेशन को बाध्य करता है, संभावित रूप से एक ही पैकेज के कई संस्करण इंस्टॉल करता है।से अधिक आक्रामक कब उपयोग करें:--legacy-peer-deps.
केवल जब काम नहीं करता है और आपने सत्यापित कर लिया है कि संयोजन सुरक्षित है। --legacy-peer-deps बेमेल संस्करणों से सूक्ष्म रनटाइम बग बना सकते हैं।--forceसमाधान 3: परस्पर विरोधी पैकेज को अपग्रेड करें
यह सही समाधान है
# Check if a newer version supports your React/Node version
npm info some-old-package peerDependencies
# Try installing a specific version
npm install some-old-package@latest
# Or check if there's an RC/beta with support
npm install some-old-package@next
जब पैकेज अद्यतन किया गया हो. लीगेसी-पीयर-डिप्स तक पहुंचने से पहले हमेशा एक नए संस्करण की जांच करें।फिक्स 4: फ़ील्ड को ओवरराइड करता है (एनपीएम 8.3+, सबसे सही दृष्टिकोण)
फ़ील्ड एनपीएम को नेस्टेड निर्भरता के एक विशिष्ट संस्करण को बाध्य करने के लिए कहता है। यह सबसे सही समाधान है – आप विरोध को चुपचाप अनदेखा करने के बजाय स्पष्ट रूप से कह रहे हैं “इस पैकेज के लिए भी रिएक्ट 18 का उपयोग करें”।
// package.json
{
"dependencies": {
"some-old-package": "2.1.0",
"react": "^18.0.0"
},
"overrides": {
"some-old-package": {
"react": "^18.0.0"
}
}
}
यार्न के लिए (रिज़ॉल्यूशन फ़ील्ड):overridesसमाधान 5: एक वैकल्पिक पैकेज खोजें
यदि किसी पैकेज का रखरखाव नहीं किया गया है और यह वर्तमान सहकर्मी संस्करणों का समर्थन नहीं करता है, तो यह अक्सर बेहतर रखरखाव वाला विकल्प खोजने का संकेत है:
// package.json
{
"resolutions": {
"some-old-package/react": "^18.0.0"
}
}
रिएक्ट 18 संगतता के बारे में खुले मुद्दों के साथ 2+ साल पहले प्रकाशित एक पैकेज को संभवतः छोड़ दिया गया है। सक्रिय रखरखाव के साथ आधुनिक विकल्पों के लिए एनपीएम खोजें।
निर्णय वृक्ष
# Check last publish date
npm info some-old-package
# Check GitHub for issues/PRs about the newer React version
# Look for: forks, alternatives, or community maintained versions
सामान्य परिदृश्य और समाधान
अक्सर पूछे जाने वाले प्रश्न
ERESOLVE error
↓
Is there a newer version of the conflicting package?
YES → npm install package@latest
NO ↓
Does the package actually work with your version (test it)?
YES → Use --legacy-peer-deps or overrides in package.json
NO ↓
Is there an actively maintained alternative?
YES → Switch packages
NO → Use --legacy-peer-deps and monitor for issues
प्रश्न: क्या –legacy-peer-deps सुरक्षित है?
# Scenario: Create React App with React 18
npx create-react-app my-app # old CRA doesn't support React 18
# Fix: Use Vite instead
npm create vite@latest my-app -- --template react-ts
# Scenario: Storybook + React 18
npx sb init # older Storybook versions conflict
# Fix: Use current Storybook
npx storybook@latest init
# Scenario: Old Redux package conflicts
# Fix: upgrade to Redux Toolkit (official recommendation)
npm install @reduxjs/toolkit react-redux
# Scenario: Next.js conflicting peer deps
# Fix: usually just --legacy-peer-deps works; Next.js team is aware
उत्तर: आम तौर पर हां, विशेष रूप से जब संघर्ष सहकर्मी संस्करण श्रेणियों के रूढ़िवादी होने के बारे में होता है (उदाहरण के लिए, सहकर्मी प्रतिक्रिया 16-17 कहता है लेकिन 18 के साथ ठीक काम करता है)। इसे प्रयोग करने के बाद हमेशा परीक्षण करें। जोखिम सूक्ष्म रनटाइम असंगतताएं हैं जो केवल किनारे के मामलों में दिखाई देती हैं।
प्रश्न: एनपीएम ने सहकर्मी निर्भरता व्यवहार को क्यों बदला?
उत्तर: एनपीएम 7+ ने साइलेंट संस्करण विवादों को रोकने के लिए सहकर्मी निर्भरता रिज़ॉल्यूशन को सख्त बना दिया है जो हार्ड-टू-डीबग रनटाइम त्रुटियों का कारण बनता है। यह अधिक सही व्यवहार है – ट्रेडऑफ़ के लिए अधिक स्पष्ट समाधान की आवश्यकता है।
प्रश्न: क्या मुझे एनपीएम ओवरराइड्स या –legacy-peer-deps का उपयोग करना चाहिए?
package.json में यह अधिक स्पष्ट है और निर्णय का दस्तावेजीकरण करता है।
तेज़ लेकिन अंतर्निहित है। उत्पादन परियोजनाओं के लिए, प्राथमिकता दें
A: overrides इसलिए ओवरराइड कोड समीक्षा में दिखाई देता है।--legacy-peer-depsप्रश्न: यह त्रुटि Node.js को अपग्रेड करने के बाद दिखाई दी – क्या यह संबंधित है?overridesउत्तर: Node.js अपग्रेड अक्सर सख्त पीयर डेप रेजोल्यूशन के साथ नए एनपीएम संस्करण लाते हैं। नोड को अपग्रेड करना समाधान नहीं है –
का उपयोग करें और अपनी निर्भरता को नए नोड/एनपीएम के साथ संगत संस्करणों में अपडेट करें।
प्रश्न: मैं नई परियोजनाओं में इसे कैसे रोकूँ?overrides or --legacy-peer-depsउत्तर: आधुनिक टूलींग (Vite, Next.js 14+, नवीनतम CRA विकल्प) से शुरुआत करें जिनमें अद्यतन समकक्ष घोषणाएँ हों। खराब रखरखाव इतिहास वाले पैकेजों से बचें।
का प्रयोग करें वर्तमान रहने के लिए त्रैमासिक।
निष्कर्षnpm outdatednpm ERESOLVE त्रुटियाँ आमतौर पर हल की जाती हैं:
(1) परस्पर विरोधी पैकेज को ऐसे संस्करण में अपग्रेड करना जो आपके फ्रेमवर्क संस्करण का समर्थन करता है, (2)
का उपयोग करना दस्तावेज़ सुधार के लिए package.json में, या (3) एक त्वरित अस्थायी समाधान के रूप मेंoverrides. बचें--legacy-peer-deps जब तक कुछ और काम नहीं करता – यह रनटाइम संस्करण विरोध पैदा कर सकता है। सबसे अच्छा दीर्घकालिक समाधान निर्भरताओं को अद्यतन रखना है ताकि संस्करण विरोध जमा न हो। जब तक कुछ और काम नहीं करता – यह रनटाइम संस्करण विरोध पैदा कर सकता है। सबसे अच्छा दीर्घकालिक समाधान निर्भरताओं को अद्यतन रखना है ताकि संस्करण विरोध जमा न हो।--force जब तक कुछ और काम नहीं करता – यह रनटाइम संस्करण विरोध पैदा कर सकता है। सबसे अच्छा दीर्घकालिक समाधान निर्भरताओं को अद्यतन रखना है ताकि संस्करण विरोध जमा न हो।
🔗 Share this article
✍️ Leave a Comment