通过require.ensure() 方法引入的模块,会自动进行代码分割,生成单独的chunk文件。
example.js
function getTemplate(templateName, callback) {
require.ensure([], function(require) {
callback(require("../require.context/templates/"+templateName)());
});
}
getTemplate("a", function(a) {
console.log(a);
});
getTemplate("b", function(b) {
console.log(b);
});
webpack.config.js
module.exports = {
optimization: {
chunkIds: "deterministic" // To keep filename consistent between different modes (for example building only)
}
};
example.js中模块的路径有变量,所以wenpack会把”../require.context/templates/“路径下的文件都打包进来。
dist/output.js
...
((module, __unused_webpack_exports, __webpack_require__) => {
var map = {
"./a": "../require.context/templates/a.js",
"./a.js": "../require.context/templates/a.js",
"./b": "../require.context/templates/b.js",
"./b.js": "../require.context/templates/b.js",
"./c": "../require.context/templates/c.js",
"./c.js": "../require.context/templates/c.js"
};
function webpackContext(req) {
var id = webpackContextResolve(req);
return __webpack_require__(id);
}
function webpackContextResolve(req) {
if(!__webpack_require__.o(map, req)) {
var e = new Error("Cannot find module '" + req + "'");
e.code = 'MODULE_NOT_FOUND';
throw e;
}
return map[req];
}
webpackContext.keys = function webpackContextKeys() {
return Object.keys(map);
};
webpackContext.resolve = webpackContextResolve;
module.exports = webpackContext;
webpackContext.id = "../require.context/templates sync recursive ^\\.\\/.*$";
/***/ })
...