webpack: Module not found: Error: Can't resolve (with relative path)

I have this structure of an app (node_modules dir excluded from this list):

├── actions.js ├── bundle.js ├── components │   ├── App.js │   ├── Footer.js │   ├── Link.js │   ├── Todo.js │   └── TodoList.js ├── Containers │   ├── AddTodo.js │   ├── FilterLink.js │   └── VisibleTodoList.js ├── index.html ├── index.js ├── main.js ├── package.json ├── package-lock.json ├── reducers.js └── webpack.config.js 

My webpack config looks like this:

module.exports = { entry: "./main.js", output: { path: __dirname, filename: "bundle.js" }, module: { loaders: [ { test: /\.js$/, loader: 'babel-loader', query: { presets: ['es2015', 'react'] } } ] } }; 

npm config:

{ "name": "webpack-redux", "version": "1.0.0", "description": "", "main": "main.js", "scripts": { "test": "nothing" }, "author": "", "license": "ISC", "devDependencies": { "babel": "^6.23.0", "babel-core": "^6.26.0", "babel-loader": "^7.1.2", "babel-preset-env": "^1.6.0", "babel-preset-es2015": "^6.24.1", "webpack": "^3.5.5" }, "dependencies": { "react": "^15.6.1", "babel-preset-react": "^6.24.1", "react-dom": "^15.6.1", "react-redux": "^5.0.6", "redux": "^3.7.2" } } 

When I run webpack command, I get this error:

ERROR in ./components/App.js Module not found: Error: Can't resolve '../containers/AddTodo' in '/home/oerp/js-programs/redux-test/components' @ ./components/App.js 11:15-47 @ ./index.js @ ./main.js ERROR in ./components/Footer.js Module not found: Error: Can't resolve '../containers/FilterLink' in '/home/oerp/js-programs/redux-test/components' @ ./components/Footer.js 11:18-53 @ ./components/App.js @ ./index.js @ ./main.js ERROR in ./components/App.js Module not found: Error: Can't resolve '../containers/VisibleTodoList' in '/home/oerp/js-programs/redux-test/components' @ ./components/App.js 15:23-63 @ ./index.js @ ./main.js 

My components/App.js content is this:

import Footer from './Footer' import AddTodo from '../containers/AddTodo' import VisibleTodoList from '../containers/VisibleTodoList' const App = () => ( <div> <AddTodo /> <VisibleTodoList /> <Footer /> </div> ) export default App 

And for example containers/AddTodo.js:

import { connect } from 'react-redux' import { addTodo } from '../actions' let AddTodo = ({ dispatch }) => { let input return ( <div> <form onSubmit={e => { e.preventDefault() if (!input.value.trim()) { return } dispatch(addTodo(input.value)) input.value = '' }} > <input ref={node => { input = node }} /> <button type="submit"> Add Todo </button> </form> </div> ) } AddTodo = connect()(AddTodo) export default AddTodo 

It seems it does not understand relative path with double dots, like ../something?

Do I need to configure webpack somehow for it to understand such paths?

2

11 Answers

Your file structure says that folder name is Container with a capital C. But you are trying to import it by container with a lowercase c. You will need to change the import or the folder name because the paths are case sensitive.

3

I met this problem with typescript but forgot to add ts and tsx suffix to resolve entry.

module.exports = { ... resolve: { extensions: ['.js', '.jsx', '.ts', '.tsx'], }, }; 

This does the job for me

while importing libraries use the exact path to a file, including the directory relative to the current file, for example:

import Footer from './Footer/index.jsx' import AddTodo from '../containers/AddTodo/index.jsx' import VisibleTodoList from '../containers/VisibleTodoList/index.jsx' 

Hope this may help

3

You have to instruct the webpack to resolve the source code by using below code in webpack.config.js

module.exports={ ... resolve:{ extensions:['.js','.jsx']; } } 

Update : There is a new build tool "Vite" that aims to provide a faster and leaner development experience for modern web projects. Its is a plug and play tool, requires very less configuration.

Just ran into this... I have a common library shared among multiple transpiled products. I was using symlinks with brunch to handle sharing things between the projects. When moving to webpack, this stopped working.

What did get things working was using webpack configuration to turn off symlink resolving.

i.e. adding this in webpack.config.js:

module.exports = { //... resolve: { symlinks: false } }; 

as documented here:

Just add it to your config. Source:

externals: [ nodeExternals() ] 
1

Had the same issue with module not found. Turns out I had a component import Picture from './Picture/Picture'; at the very bottom of all the imports. When I moved it below import React, { Component } from 'react';, it worked.

1

Look the path for example this import is not correct import Navbar from '@/components/Navbar.vue' should look like this ** import Navbar from './components/Navbar.vue'**

1

If you use multiple node_modules (yarn workspace etc), tell webpack where they are:

 externals: [nodeExternals({ modulesDir: path.resolve(__dirname, '../node_modules'), }), nodeExternals()], 

I had a different problem. some of my includes were set to 'app/src/xxx/yyy' instead of '../xxx/yyy'

changing templateUrl: '' to template: '' fixed it

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like