Cannot find module 'metro/src/lib/TerminalReporter' in expo react-native project
Categories:
Resolving 'Cannot find module 'metro/src/lib/TerminalReporter'' in Expo React Native Projects

Encountering 'Cannot find module 'metro/src/lib/TerminalReporter'' can halt your Expo development. This guide explains why it happens and provides effective solutions to get your project running smoothly again.
The error message Cannot find module 'metro/src/lib/TerminalReporter'
is a common frustration for developers working with Expo and React Native. It typically indicates an issue with how Metro, the JavaScript bundler for React Native, is being resolved or accessed within your project's node_modules
. This problem often arises after dependency updates, npm
or yarn
cache issues, or inconsistencies in your project's environment. Understanding the root cause is key to a lasting solution.
Understanding the Metro Bundler and the Error
Metro is an essential part of the React Native ecosystem, responsible for bundling your JavaScript code into a format that can be understood by mobile devices. It handles tasks like transpilation, asset bundling, and hot reloading. The TerminalReporter
module is a specific component within Metro that manages how build progress and errors are displayed in your terminal.
When you see the Cannot find module
error, it means that your project's execution environment, specifically the process trying to start the Metro bundler, cannot locate this particular file within the metro
package. This usually points to one of the following scenarios:
- Corrupted
node_modules
: Themetro
package or its dependencies might be incomplete or damaged. - Incorrect
metro
version: An incompatible version ofmetro
might be installed, or there could be a version mismatch betweenmetro
andExpo
. - Caching issues:
npm
,yarn
, or Metro's own caches might be serving outdated or incorrect module resolutions. - Symlink problems: On some operating systems or specific setups, symlinks within
node_modules
can become broken or incorrectly resolved.
flowchart TD A[Start Expo Project] --> B{Metro Bundler Initialization} B --> C{Locate 'metro/src/lib/TerminalReporter'} C -- Module Not Found --> D[Error: Cannot find module 'metro/src/lib/TerminalReporter'] C -- Module Found --> E[Bundler Starts Successfully] D --> F{Troubleshooting Steps} F --> G[Clear Caches] F --> H[Reinstall Dependencies] F --> I[Check Metro/Expo Versions] G --> B H --> B I --> B
Flowchart of Metro Bundler Initialization and Error Point
Common Solutions and Troubleshooting Steps
Most solutions revolve around ensuring a clean and consistent node_modules
environment and clearing any lingering caches. It's often best to try these steps in order, as they progressively become more thorough.
1. Step 1: Clear Caches and Restart
This is the quickest and often most effective first step. Clearing npm
or yarn
caches, along with Metro's own cache, can resolve many module resolution issues.
2. Step 2: Reinstall Node Modules
If clearing caches doesn't work, a full reinstall of your project's dependencies is the next logical step. This ensures that all packages, including metro
, are downloaded and linked correctly.
3. Step 3: Check Expo and Metro Versions
Incompatibility between your Expo SDK version and the metro
package can lead to this error. Ensure your expo
package and metro
related dependencies are aligned.
4. Step 4: Verify package.json
and package-lock.json
/ yarn.lock
Sometimes, these files can become corrupted or contain incorrect entries. Inspect them for any anomalies, especially around metro
or expo
related packages.
# Step 1: Clear Caches and Restart
rm -rf $TMPDIR/metro-cache
rm -rf $TMPDIR/haste-map-metro-*
npm cache clean --force # or yarn cache clean
# Step 2: Reinstall Node Modules
rm -rf node_modules
npm install # or yarn install
# Step 3: Start your Expo project
npx expo start --clear # or yarn expo start --clear
Commands to clear caches, reinstall dependencies, and restart Expo
npx expo start --clear
(or yarn expo start --clear
) after any dependency changes or cache clearing. The --clear
flag ensures Metro's cache is also invalidated.Advanced Troubleshooting and Edge Cases
If the standard solutions don't resolve the issue, consider these less common scenarios:
node_modules
is generally discouraged as it can lead to unpredictable behavior and will be overwritten on the next npm install
or yarn install
.Node.js Version Incompatibility
Ensure you are using a Node.js version compatible with your Expo SDK. Outdated or very new Node.js versions can sometimes cause unexpected issues with dependency installations.
Global vs. Local expo-cli
If you have expo-cli
installed globally, ensure it's up-to-date and that you're not encountering conflicts with a local version. It's often recommended to use npx expo
to always use the project's local expo
package.
Antivirus or Firewall Interference
Occasionally, security software can interfere with npm
or yarn
operations, leading to incomplete installations. Temporarily disabling them (if safe to do so) might help diagnose the issue.
WSL (Windows Subsystem for Linux) Specifics
Users on WSL might encounter issues related to file system permissions or symlink handling. Ensure your project is located within the WSL filesystem (e.g., /home/user/project
) rather than mounted Windows drives (e.g., /mnt/c/Users/user/project
) for better compatibility.

Interdependencies in an Expo React Native project