As a React developer, you’ve probably run into the dreaded npm error: “Could not resolve dependency: peer react@^18.0.0 from @testing-library/react@13.4.0”. It’s frustrating, right? This error pops up when you’re trying to set up a new React project or install dependencies, and suddenly, your build fails. Don’t worry—I’m here to break it down for you like a friend explaining a tricky concept over coffee.
Table of Contents
What Does This npm Error Mean?
Before we fix the problem, let’s understand what’s going on. The error message looks something like this:
npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR! While resolving: your-project@0.1.0
npm ERR! Found: react@19.0.0
npm ERR! node_modules/react
npm ERR! react@"^19.0.0" from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer react@"^18.0.0" from @testing-library/react@13.4.0
npm ERR! node_modules/@testing-library/react
npm ERR! @testing-library/react@"^13.0.0" from the root project
npm ERR!
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
Here’s what it’s telling you in plain English:
- Dependency Conflict: Your project is using React 19.0.0 (or another version), but the
@testing-library/react@13.4.0
package expects React 18.x.x. This mismatch causes npm to freak out because it can’t satisfy both requirements. - Peer Dependencies:
@testing-library/react@13.4.0
lists React 18 as a peer dependency. This means it needs React 18 to work properly, but it won’t install React itself—it expects your project to provide it. - ERESOLVE: npm’s dependency resolver (introduced in npm 7) is strict about peer dependencies. If it can’t find a compatible version, it throws this error.
In short, the error happens because React 19 (or another incompatible version) is installed, but @testing-library/react@13.4.0
only works with React 18. This is super common when new React versions drop, and libraries like Testing Library haven’t caught up yet.
Why Does This Happen in React Projects?
Dependency conflicts like this are a fact of life in JavaScript development, especially with React’s fast-moving ecosystem. Here are the main reasons this specific error occurs:
- React Version Mismatch
React 19 was released recently (as of 2025), and tools likecreate-react-app
or other templates often install the latest version by default. However,@testing-library/react@13.4.0
was built for React 18 and hasn’t been updated to support React 19. - Outdated Dependencies
If you’re using an older template or package.json file, it might include@testing-library/react@13.4.0
, which isn’t compatible with newer React versions. - Strict npm Resolver
Since npm 7, the dependency resolver is stricter about peer dependencies to prevent broken setups. Older versions of npm (4-6) were more lenient, which is why you might not have seen this error before. - Ecosystem Lag
Libraries like@testing-library/react
take time to update for new React versions. In 2025, many libraries are still catching up to React 19.
Now that we know why this happens, let’s fix it!
How to Fix the npm Peer Dependency Error
There are several ways to resolve this error, depending on your project’s needs. I’ll walk you through each solution, explain when to use it, and highlight any risks. Let’s start with the most recommended approaches.
Solution 1: Upgrade @testing-library/react to a Compatible Version
The best fix is to use a version of @testing-library/react
that supports your React version. As of 2025, @testing-library/react@16.3.0
is the latest version and supports React 19.
Steps:
- Check Your React Version
Run this command to confirm your React version:
npm list react
If it shows react@19.0.0
(or similar), you need a compatible Testing Library version.
- Install the Latest @testing-library/react
Update@testing-library/react
to the latest version:
npm install --save-dev @testing-library/react@latest
- Verify Installation
Check the installed version:
npm list @testing-library/react
It should show something like @testing-library/react@16.3.0
.
- Run npm Install
Reinstall dependencies to ensure everything aligns:
npm install
- Test Your Project
Start your app or run tests:
npm start
npm test
Why This Works:
The latest @testing-library/react
is designed to work with React 19, resolving the peer dependency conflict. It’s the cleanest solution because it keeps your project up-to-date.
Risks:
- If your tests rely on older Testing Library APIs, you might need to update your test code. Check the React Testing Library docs for breaking changes.
- Ensure other dependencies (like
@testing-library/jest-dom
) are also updated to avoid new conflicts.
Solution 2: Downgrade React to Version 18
If you can’t upgrade @testing-library/react
(e.g., due to project constraints), you can downgrade React to version 18, which @testing-library/react@13.4.0
expects.
Steps:
- Uninstall React and React-DOM
Remove the current versions:
npm uninstall react react-dom
- Install React 18
Install React 18 and React-DOM 18:
npm install react@18.2.0 react-dom@18.2.0
- Verify Versions
Confirm the installed versions:
npm list react react-dom
It should show react@18.2.0
and react-dom@18.2.0
.
- Reinstall Dependencies
Run:
npm install
- Test Your Project
Start your app or tests:
npm start
npm test
Why This Works:
@testing-library/react@13.4.0
explicitly supports React 18, so downgrading React resolves the conflict.
Risks:
- You’ll miss out on React 19’s new features (like Server Components or Concurrent Rendering).
- Downgrading might cause issues with other dependencies that require React 19.
- If you’re using
create-react-app
, it might reinstall React 19 unless you lock the version inpackage.json
.
Expert Tip:
Lock React versions in your package.json
to prevent accidental upgrades:
"dependencies": {
"react": "18.2.0",
"react-dom": "18.2.0"
}
Solution 3: Use –legacy-peer-deps
If upgrading or downgrading isn’t an option, you can bypass the peer dependency check using npm’s --legacy-peer-deps
flag. This tells npm to ignore peer dependency conflicts, mimicking the behavior of npm 4-6.
Steps:
- Run npm Install with –legacy-peer-deps
Install dependencies with the flag:
npm install --legacy-peer-deps
- Test Your Project
Verify everything works:
npm start
npm test
Why This Works:
--legacy-peer-deps
skips the strict peer dependency checks, allowing incompatible versions to coexist. It’s a quick fix for getting your project running.
Risks:
- Your project might have runtime errors if
@testing-library/react@13.4.0
isn’t fully compatible with React 19. - This is a temporary workaround, not a long-term solution. Libraries might break unexpectedly.
- Future dependency updates could reintroduce conflicts.
Expert Tip:
Avoid --legacy-peer-deps
in production unless you’ve thoroughly tested your app. It’s better for development or prototyping.
Solution 4: Use –force to Override Conflicts
Similar to --legacy-peer-deps
, the --force
flag tells npm to override dependency conflicts and install packages anyway.
Steps:
- Run npm Install with –force
Force the installation:
npm install --force
- Test Your Project
Check for issues:
npm start
npm test
Why This Works:
--force
ignores peer dependency errors and installs the specified versions, even if they’re incompatible.
Risks:
- Like
--legacy-peer-deps
, this can lead to runtime errors or broken features. - It’s riskier than
--legacy-peer-deps
because it might overwrite other dependencies. - Not recommended for production.
Expert Tip:
Use --force
only as a last resort, and immediately plan to upgrade or downgrade dependencies for stability.
Solution 5: Switch to Yarn or pnpm
If npm keeps giving you trouble, try an alternative package manager like Yarn or pnpm. They handle peer dependencies more flexibly and might resolve the issue automatically.
Using Yarn:
- Install Yarn (if not already installed):
npm install -g yarn
- Delete node_modules and package-lock.json
Clear npm’s cache:
rm -rf node_modules package-lock.json
- Install Dependencies with Yarn
Run:
yarn install
- Test Your Project
Verify:
yarn start
yarn test
Using pnpm:
- Install pnpm:
npm install -g pnpm
- Delete node_modules and package-lock.json:
rm -rf node_modules package-lock.json
- Install Dependencies with pnpm:
pnpm install
- Test Your Project:
pnpm start
pnpm test
Why This Works:
Yarn and pnpm have different dependency resolution algorithms that are often less strict than npm’s. They might resolve conflicts that npm can’t handle.
Risks:
- Switching package managers might introduce new quirks, especially if your team uses npm.
- Ensure your CI/CD pipelines support Yarn or pnpm.
Expert Tip:
Yarn is particularly good for React projects because it caches dependencies for faster installs. Add a yarn.lock
file to lock versions:
yarn install
Solution 6: Use Vite Instead of create-react-app
create-react-app
is deprecated in 2025, and its default templates often cause dependency issues (like this one). Switching to Vite, a modern build tool, can avoid these problems altogether.
Steps:
- Create a New Vite Project
Start fresh with Vite:
npm create vite@latest my-project -- --template react
- Navigate to Project Folder:
cd my-project
- Install Dependencies:
npm install
- Add Testing Library (Optional)
If you need@testing-library/react
:
npm install --save-dev @testing-library/react@latest @testing-library/jest-dom
- Run Your Project:
npm run dev
Why This Works:
Vite is lightweight, modern, and doesn’t bundle outdated dependencies like create-react-app
. It installs the latest compatible versions by default.
Risks:
- You’ll need to migrate your code from
create-react-app
to Vite, which might require minor tweaks (e.g., updating scripts). - Vite’s ecosystem is different, so check if your libraries support it.
Expert Tip:
Vite is the future of React development in 2025. It’s faster and avoids many legacy issues. Configure Jest for testing with Vite using this guide.
Best Practices to Avoid This Error in the Future
Now that you’ve fixed the error, let’s talk about how to prevent it from happening again. Here are expert tips for smooth React development:
1. Keep Dependencies Updated
- Regularly check for outdated packages:
npm outdated
- Update libraries to their latest versions:
npm update
2. Lock Dependency Versions
- Use exact versions in
package.json
to avoid surprises:
"dependencies": {
"react": "18.2.0",
"@testing-library/react": "16.3.0"
}
- Commit
package-lock.json
to ensure consistent installs.
3. Use Modern Tools
- Replace
create-react-app
with Vite or Next.js for new projects. - Adopt TypeScript for better type safety and fewer runtime errors.
4. Monitor Peer Dependencies
- Before installing a library, check its peer dependencies:
npm info @testing-library/react peerDependencies
- Ensure your React version matches.
5. Automate Dependency Checks
- Use tools like
dependabot
(GitHub) orrenovate
to auto-update dependencies. - Set up CI tests to catch conflicts early.
6. Stay Informed
- Follow React and Testing Library blogs for version updates.
- Join communities like r/reactjs or Reactiflux for real-time tips.
Common Questions About This Error
Why does npm care about peer dependencies?
Peer dependencies ensure libraries work with compatible versions of their requirements (like React). npm’s strict checks prevent broken setups, but they can be annoying when versions don’t align.
Is it safe to use –legacy-peer-deps in production?
Not really. It ignores conflicts, which could lead to runtime errors. Use it for development, but resolve dependencies properly for production.
Should I downgrade React or upgrade Testing Library?
Upgrading Testing Library is usually better because it keeps your project modern. Downgrading React means missing new features and fixes.
Can I ignore this error?
Ignoring it (with --force
or --legacy-peer-deps
) might work temporarily, but it risks breaking your app. Always test thoroughly if you go this route.
Why does create-react-app cause this issue?
create-react-app
is outdated and often installs conflicting versions. Switching to Vite or Next.js avoids these headaches.
Troubleshooting Tips
If none of the solutions work, try these steps:
- Clear npm Cache:
npm cache clean --force
- Delete node_modules and package-lock.json:
rm -rf node_modules package-lock.json
npm install
- Check Node Version:
Ensure you’re using a compatible Node version (e.g., 18.x or 20.x):
node --version
Update Node if needed using nvm.
- Inspect package.json:
Look for conflicting dependencies. Usenpm ls
to see the dependency tree:
npm ls react @testing-library/react
- Search for Known Issues:
Check GitHub issues forcreate-react-app
or@testing-library/react
:
Conclusion: Mastering Dependency Conflicts in React
The “Could not resolve npm error: peer react@^18.0.0 from @testing-library/react@13.4.0” is a common hurdle in React development, but it’s totally fixable. By upgrading @testing-library/react
, downgrading React, or using tools like Vite, you can resolve the conflict and get back to coding. The key is understanding why these errors happen and choosing the solution that fits your project.
In 2025, the React ecosystem is more exciting than ever, with new tools and features to explore. Don’t let dependency errors slow you down—use this guide to tackle them like a pro. Have you run into this error before? Got a favorite fix? Let me know in the comments or on X—I’d love to hear your thoughts!
Happy coding, and here’s to building awesome React apps without npm headaches!
Resources
- React Testing Library Documentation – Official guide for setup and usage.
- LynxJS Roadmap for Developers: Mastering Cross-Platform Development in 2025