webpack 加载不加载哪个文件, 与你把文件放在哪个目录无关, 与你设不设置 loader也无关。
webpack 打包的时候会静态代码分析:从入口文件开始, 把你require/import的文件打包。
比如 import xx from './src/xx', 那么xx.js 将会被打包,同时会打包xx.js 里面的require/import打包。
类似 ‘./src/xx’这种路径,静态分析的时候是知道文件目录的,打包没有问题。 那么假如路径里面包含变量呢? 比如
var path = ...
require('./src/' + path)
这种时候静态分析并不能确切的知道打包src下的哪个文件。此时webpack会打包src下的所有文件。 所以题主 会看到 './src ^./.*$ ' 这样的路径。
webpack内部会记录一个 文件名与 webpack内部地址的 map记录。 从而在运行的时候加载。 为了方便理解,贴一下 这种情况webpack打包之后的代码:
(function(module, exports, __webpack_require__) {
var map = {
"./fd1": 0,
"./fd1.js": 0,
"./fd2": 1,
"./fd2.js": 1
};
function webpackContext(req) {
return __webpack_require__(webpackContextResolve(req));
};
function webpackContextResolve(req) {
var id = map[req];
if(!(id + 1)) // check for number or string
throw new Error("Cannot find module '" + req + "'.");
return id;
};
webpackContext.keys = function webpackContextKeys() {
return Object.keys(map);
};
webpackContext.resolve = webpackContextResolve;
module.exports = webpackContext;
webpackContext.id = 4;
/***/ }),