It all done by webpack
module resolution, a resolver
is a library which helps in locating a module by its absolute path.
The dependency module can be from the application code or a third-party library. The resolver helps webpack
find the module code that needs to be included in the bundle for every such require/import
statement. webpack
uses enhanced-resolve to resolve file paths while bundling modules.
Once the path is resolved based on the above rule, the resolver checks to see if the path points to a file or a directory. If the path points to a file:
- If the path has a file extension, then the file is bundled straightaway.
- Otherwise, the file extension is resolved using the resolve.extensions option, which tells the resolver which extensions are acceptable for resolution e.g. .js, .jsx.
Resolve extensions:
These options change how modules are resolved. webpack
provides reasonable defaults, but it is possible to change the resolving in detail.
In webpack.config.js
module.exports = {
//...
resolve: {
enforceExtension: false
}
};
If the value is true
here, it will not allow extension-less files. So by default require('./foo')
works if ./foo
has a .js
extension, but with this (enforceExtension
) enabled only require('./foo.js')
will work.