Resolve package version and peer dependency conflicts in the dependency tree.
When to use: Package manager reports version conflicts or incompatible dependencies
Purpose: Resolve dependency tree conflicts to enable successful installation.
Extract from error message:
Common error patterns:
npm:
ERESOLVE unable to resolve dependency tree
Found: [email protected]
Could not resolve dependency:
peer package-b@"^2.0.0" from [email protected]
yarn:
error Found incompatible versions:
[email protected] (required by x, required ^1.0.0)
[email protected] (required by y, required ^2.0.0)
pip:
ERROR: package-a 1.0.0 has requirement package-b>=2.0.0,
but you'll have package-b 1.5.0 which is incompatible.
For each package in conflict:
Check package documentation:
Check peer dependencies:
npm info package-name peerDependencies
Check available versions:
npm view package-name versions
Choose appropriate strategy:
A. Update to Latest Compatible
B. Lock Specific Version
C. Update Dependent Package
D. Use Resolution Override
Method 1: Update package.json versions
{
"dependencies": {
"package-a": "^2.0.0", // Update to compatible version
"package-b": "^3.0.0"
}
}
Method 2: Use overrides (npm 8.3+)
{
"overrides": {
"package-a": "2.5.0" // Force specific version
}
}
Method 3: Use legacy peer deps flag
npm install --legacy-peer-deps
Method 4: Install with force
npm install --force # Not recommended, may break things
Use resolutions:
{
"resolutions": {
"package-a": "2.5.0" // Force version across all deps
}
}
Or update and reinstall:
yarn upgrade package-a@^2.0.0
Method 1: Update requirements.txt
package-a==2.5.0 # Exact version
package-b>=2.0.0,<3.0.0 # Version range
Method 2: Install specific version
pip install package-a==2.5.0
Method 3: Use constraint file
Create constraints.txt:
package-a==2.5.0
Install with:
pip install -c constraints.txt -r requirements.txt
Add dependency management:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>package-a</artifactId>
<version>2.5.0</version>
</dependency>
</dependencies>
</dependencyManagement>
Or exclude transitive dependency:
<dependency>
<groupId>com.example</groupId>
<artifactId>package-b</artifactId>
<version>1.0.0</version>
<exclusions>
<exclusion>
<groupId>com.example</groupId>
<artifactId>package-a</artifactId>
</exclusion>
</exclusions>
</dependency>
Remove cached dependencies:
npm:
rm -rf node_modules
rm package-lock.json
npm cache clean --force
npm install
yarn:
rm -rf node_modules
rm yarn.lock
yarn cache clean
yarn install
pip:
pip cache purge
pip install -r requirements.txt --force-reinstall
After updating configuration:
# npm
npm install
# yarn
yarn install
# pip
pip install -r requirements.txt
# maven
mvn clean install
After resolving conflict:
Add comment in package file:
{
"dependencies": {
"package-a": "2.5.0" // Fixed at 2.5.0 to resolve conflict with package-b
}
}
Error:
[email protected] requires peer package-b@^2.0.0
but [email protected] is installed
Fix:
npm install package-b@^2.0.0
Error:
Found: [email protected] (from project)
Found: [email protected] (from old-package)
Fix using overrides:
{
"overrides": {
"lodash": "4.17.21" // Use latest version everywhere
}
}
Error:
package-x needs react@^16.0.0
package-y needs react@^18.0.0
Fix: Update package-x to version that supports React 18, or downgrade package-y.
npm install package-x@latest # Check if newer version supports React 18
Error:
Package "@angular/material" has a peer dependency on "@angular/cdk@^17.0.0"
but "@angular/[email protected]" is installed
Fix:
npm install @angular/cdk@^17.0.0
Or update both:
npm install @angular/material@^17.0.0 @angular/cdk@^17.0.0
Error:
Found: [email protected]
Required: typescript@~5.2.0 by @angular/[email protected]
Fix package.json:
{
"devDependencies": {
"typescript": "~5.2.0" // Update to required version
}
}
Reinstall:
rm -rf node_modules package-lock.json
npm install
Error:
package-a depends on [email protected]
package-b depends on [email protected]
Fix using overrides:
{
"dependencies": {
"package-a": "^1.0.0",
"package-b": "^2.0.0"
},
"overrides": {
"package-c": "2.5.0" // Force v2 everywhere, ensure package-a can handle it
}
}
Error:
ERROR: django 3.0.0 has requirement sqlparse>=0.2.2,
but you'll have sqlparse 0.1.0 which is incompatible.
Fix requirements.txt:
django==3.0.0
sqlparse>=0.2.2 # Update to satisfy django's requirement
Reinstall:
pip install -r requirements.txt --upgrade