The "Module not found" error occurs when React's build tool (Webpack/Vite) cannot locate a file or package you're trying to import. This is a compile-time error that prevents your app from building.
# For missing packages
npm install package-name
# For path issues "” check the exact path
ls src/components/ # Verify file exists and check exact name
# Clean install if node_modules is corrupted
rm -rf node_modules package-lock.json
npm install
import axios from 'axios'; // Module not found: Can't resolve 'axios'
import { motion } from 'framer-motion'; // Not installed!
# Install the missing package
npm install axios
npm install framer-motion
# Or install multiple at once
npm install axios framer-motion react-router-dom
# Verify it's in package.json after installing
cat package.json | grep axios
// File is at: src/components/Button/Button.jsx
import Button from './Button'; // ❌ Wrong path
import Button from '../components/btn'; // ❌ Wrong name
import Button from './components/Button' // ❌ Missing leading ./
// ✅ Correct relative path from current file
import Button from '../components/Button/Button';
// ✅ Or if there's an index.js in the folder
import Button from '../components/Button'; // Resolves to index.js
// ✅ Use path aliases (configure in vite.config.js or jsconfig.json)
import Button from '@/components/Button';
// File on disk: UserProfile.jsx
import UserProfile from './userprofile'; // ❌ Works on Windows, fails on Linux/Mac!
import UserProfile from './Userprofile'; // ❌ Wrong case
// ✅ Match exact case of filename
import UserProfile from './UserProfile'; // Exact match
// Best practice: Use PascalCase for component files
// UserProfile.jsx, Button.jsx, NavBar.jsx
git clone https://github.com/user/project
cd project
npm start # Module not found errors everywhere!
git clone https://github.com/user/project
cd project
npm install # ✅ Install all dependencies first!
npm start
Either the package isn't installed (run npm install), the file path is wrong, there's a case sensitivity mismatch, or the file was deleted/renamed without updating the import.
Windows file system is case-insensitive, so Button.jsx and button.jsx are the same. Linux is case-sensitive, so they're different files. Always match the exact case of your filenames.
In Vite, add resolve.alias in vite.config.js. In CRA, use craco or react-app-rewired. In jsconfig.json, add paths configuration. This lets you use @/components instead of ../../components.
The node_modules folder is in .gitignore and not committed to git. After cloning, you must run npm install to download all dependencies listed in package.json.
Delete node_modules and package-lock.json, then run npm install. This gives you a fresh install. On Windows: rmdir /s /q node_modules. On Mac/Linux: rm -rf node_modules.
Explore 500+ free tutorials across 20+ languages and frameworks.