Can't resolve module (not found) in React.js
JavascriptReactjsJavascript Problem Overview
I can't believe that I'm asking an obvious question, but I still get the error in console log.
Console says that it can't find the module in the directory, but I've checked at least 10 times for typos. Anyways, here's the component code.
I want to render Header in root
import React, { Component } from 'react'
import Header from './src/components/header/header'
import logo from './logo.svg'
import './App.css'
class App extends Component {
render() {
return (
<Header/>
);
}
}
export default App;
This is the Header
component
import React, { Component } from 'react'
import ReactDOM from 'react-dom'
import navBar from './src/components/header/navBar'
import './src/css/header.css'
class Header extends Component {
render() {
return {
<div>
<div id="particles-js"></div>
<navBar/>
<Title/>
</div>
};
}
}
ReactDOM.render(<Header/>, document.getElementById('header'));
I've checked at least 10 times that the module is at this location ./src/components/header/header
, and it is (folder "header" contains "header.js").
Yet, React still throws this error:
Failed to compile
./src/App.js Module not found: Can't resolve './src/components/header/header' in '/home/wiseman/Desktop/React_Components/github-portfolio/src'
npm test says the same thing.
Javascript Solutions
Solution 1 - Javascript
The way we usually use import
is based on relative path.
.
and ..
are similar to how we use to navigate in terminal
like cd ..
to go out of directory and mv ~/file .
to move a file
to current directory.
my-app/
node_modules/
package.json
src/
containers/card.js
components/header.js
App.js
index.js
In your case, App.js
is in src/
directory while header.js
is in src/components
. To import
you would do import Header from './components/header'
. This roughly translate to in my current directory, find the components folder that contain a header file.
Now, if from header.js
, you need to import
something from card
, you would do this. import Card from '../containers/card'
. This translate to, move out of my current directory, look for a folder name containers that have a card file.
As for import React, { Component } from 'react'
, this does not start with a ./
or ../
or /
therefore node will start looking for the module in the node_modules
in a specific order till react
is found. For a more detail understanding, it can be read here.
Solution 2 - Javascript
If you create an application with react-create-app, don't forget set environment variable:
NODE_PATH=./src
Or add to .env
file to your root folder;
Solution 3 - Javascript
Solution 4 - Javascript
Adding NODE_PATH
as environment variable in .env
is deprecated and is replaced by adding "baseUrl": "./src"
, to compilerOptions
in jsconfig.json
or tsconfig.json
.
Solution 5 - Javascript
in my case, The error message was
Module not found: Error: Can't resolve '/components/body
While everything was in the correct directory.
I found that renaming body.jsx
to body.js
resolve the issue!
So I added this code in webpack.config.js
to resolve jsx
as js
module.exports = {
//...
resolve: {
extensions: ['.js', '.jsx']
}
};
And then build error gone!
Solution 6 - Javascript
I think its the double use of header. I just tried something similar myself and also caused issues. I capitalized my component file to match the others and it worked.
import Header from './src/components/header/header';
Should be
import Header from './src/components/header/Header';
Solution 7 - Javascript
I had a similar issue.
Cause:
import HomeComponent from "components/HomeComponent";
Solution:
import HomeComponent from "./components/HomeComponent";
NOTE: ./
was before components. You can read @Zac Kwan's post above on how to use import
Solution 8 - Javascript
There is a better way you can handle the import of modules in your React App. Consider doing this:
> Add a jsconfig.json
file to your base folder. That is the same folder containing your package.json. Next define your base URL imports in it:
//jsconfig.json
{
"compilerOptions": {
"baseUrl": "./src"
}
}
Now rather than calling ../../
you can easily do this instead:
import navBar from 'components/header/navBar'
import 'css/header.css'
Notice that 'components/' is different from '../components/'
It's neater this way.
But if you want to import files in the same directory you can do this also:
import logo from './logo.svg'
Solution 9 - Javascript
You can try to execute 'npm install' in the app folder. This might also solve the problem. It worked for me.
Solution 10 - Javascript
I faced the same issue when I created a new react app, I tried all options in https://github.com/facebook/create-react-app/issues/2534 but it didn't help. I had to change the port for the new app and then it worked. By default, apps use the port 3000.I changed the port to 8001 in package.json as follows:
"scripts": {
"start": "PORT=8001 react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
Solution 11 - Javascript
you should change import Header from './src/components/header/header' to
import Header from '../src/components/header/header'
Solution 12 - Javascript
You need to be in project folder, if you are in src
or public
you have to come out of those folders. Suppose your react-project name is 'hello-react' then cd hello-react
Solution 13 - Javascript
I was facing the same problem and I resolved it.
See if your index.js
file is in src
folder, then what ever file you are importing, the folder containing that must also be inside the src folder.
That means if your components folder is outside the src
folder, just drag it inside the src
folder in your editor because the files outside of src
folder are not imported.
Then you shall be able to import using ./components/header/header
(in this case)
Solution 14 - Javascript
For me, I had the input correct but npm start
can be buggy (at least using it with Hyper terminal on Windows and Linux). If I move files to different folders, npm start doesn't pick up on these changes. I need to cancel npm start process, make the move, save and then run npm start
and it will see the files now.
Solution 15 - Javascript
replace ReactDOM.render(<Header/>, document.getElementById('header'));
by export default Header
in Header.js
Solution 16 - Javascript
I just had this issue from auto-importing a component, no type or webpack config issues.
What fixed it was changing the import from relative to the app root directory to relative to the file:
import MyComponent from "src/components/MyComponent";
to
import MyComponent from "../components/MyComponent";
If you're getting this from Visual Studio Code auto-importing via the shortest route, you can change it so it imports relatively. By going here:
menu File → Preferences → Settings → User Settings,
"typescript.preferences.importModuleSpecifier": "relative"
Solution 17 - Javascript
If you are using create-react-app, and have just added typescript to it, check whether a tsconfig.json
has been auto-generated for you. The CRA docs say that it should be, but there seems to be a bug at the moment where it is not being generated.
If the tsconfig.json
is missing, there's a few ways to create one yourself.
- Copy one off the internet or from another repo
npx tsc --init
- Create a fresh project somewhere else using
npx create-react-app my-ts-proj --template typescript
and then copy the tsconfig over from there
Solution 18 - Javascript
I solved by putting the file extension
import MyComponent from "src/components/MyComponent";
to
import MyComponent from "src/components/MyComponent.tsx";
Solution 19 - Javascript
In my case I rename a component file, an VS Code add the below line of code for me:
import React, { Component } from "./node_modules/react";
So I fixed by removing the: ./node_modules/
import React, { Component } from "react";
Cheers!
Solution 20 - Javascript
I think it may help you-
Read your error carefully-./src/App.js Module not found: Can't resolve './src/components/header/header' in '/home/wiseman/Desktop/React_Components/github-portfolio/src'
just write- ./header/header instead ./src/components/header/header in App.js
if it doesnt work try to change header file name may be head
Solution 21 - Javascript
Check for the import statements.It should be ended with semicolon. If you miss any, you will get this error.
Also check whether following import statement added in you component.
import { threadId } from 'worker_threads';
If so remove that line. It works for me.