'Cannot resolve load path in webpack
I try to migrate gulp+browserify to webpack and I have problems resolving path.
Here is my project tree :
/path/to/project
├── webpack.config.js
└── www/static
├── build
│ ├── js
│ │ ├── main.js <-------│ Output wanted
│ │ └── main.js.map <---│
├── js
│ ├── app.js
│ ├── contact.js
│ ├── device.js
│ └── ...
└── sass
├── main.scss
└── partials
├── _helpers.scss
├── _mixins.scss
└── _variables.scss
And here is my config file :
var path = require('path');
module.exports = {
entry: { 'app': 'app.js' },
resolve: {
modulesDirectories: ['www/static/js/', './']
},
output: {
filename: './www/static/build/js/main.js'
},
module: {
loaders: []
}
};
app.js content for testing purpose :
var $ = require('jquery'),
Device = require('device'),
Ga = require('ga');
require('jquery.raty');
require('jquery.autoNumeric');
require('jquery.unveil');
function initialize() {}
module.exports = {
initialize: initialize,
};
And when I launch webpack I got the error with webpack --display-error-details
:
ERROR in Entry module not found: Error: Can't resolve 'app' in '/path/to/project' resolve 'app' in '/path/to/project' Parsed request is a module No description file found resolve as module /Users/jordid/MAWork/MA_vagrant/apps/node_modules doesn't exist or is not a directory /Users/jordid/MAWork/MA_vagrant/node_modules doesn't exist or is not a directory /Users/jordid/MAWork/node_modules doesn't exist or is not a directory /Users/jordid/node_modules doesn't exist or is not a directory /Users/node_modules doesn't exist or is not a directory /node_modules doesn't exist or is not a directory looking for modules in /path/to/project/node_modules No description file found No description file found as directory /path/to/project/node_modules/app doesn't exist no extension /path/to/project/node_modules/app doesn't exist .js /path/to/project/node_modules/app.js doesn't exist .json /path/to/project/node_modules/app.json doesn't exist
I don't understand why web pack search only in node_modules folder and not in 'www/static/js/' folder.
For information, I will have multiple entries, but for now I just want webpack works.
Thanks for help.
Solution 1:[1]
According to webpack docs modulesDirectories
should be an array of directory names. NOT paths.
For example, if the value is ["mydir"], webpack will look in “./mydir”, “../mydir”, “../../mydir”, etc.
Solution 2:[2]
Got it.
I must use context
option :
entry: { 'app': 'app.js' },
resolve: {
modulesDirectories: ['www/static/js/', './']
},
replaced by :
entry: { 'app' : './app.js' },
context: path.resolve(__dirname, './www/static/js/'),
Solution 3:[3]
I don't think context is the correct way to handle this.
I would just make the path to my entry file absolute and forget resolve.modulesDirecories
But that's just me.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Strelok |
Solution 2 | JiDai |
Solution 3 | Craig McKenna |