通过require.ensure() 方法引入的模块,会自动进行代码分割,生成单独的chunk文件。

example.js

  1. function getTemplate(templateName, callback) {
  2. require.ensure([], function(require) {
  3. callback(require("../require.context/templates/"+templateName)());
  4. });
  5. }
  6. getTemplate("a", function(a) {
  7. console.log(a);
  8. });
  9. getTemplate("b", function(b) {
  10. console.log(b);
  11. });

webpack.config.js

  1. module.exports = {
  2. optimization: {
  3. chunkIds: "deterministic" // To keep filename consistent between different modes (for example building only)
  4. }
  5. };

example.js中模块的路径有变量,所以wenpack会把”../require.context/templates/“路径下的文件都打包进来。

dist/output.js

  1. ...
  2. ((module, __unused_webpack_exports, __webpack_require__) => {
  3. var map = {
  4. "./a": "../require.context/templates/a.js",
  5. "./a.js": "../require.context/templates/a.js",
  6. "./b": "../require.context/templates/b.js",
  7. "./b.js": "../require.context/templates/b.js",
  8. "./c": "../require.context/templates/c.js",
  9. "./c.js": "../require.context/templates/c.js"
  10. };
  11. function webpackContext(req) {
  12. var id = webpackContextResolve(req);
  13. return __webpack_require__(id);
  14. }
  15. function webpackContextResolve(req) {
  16. if(!__webpack_require__.o(map, req)) {
  17. var e = new Error("Cannot find module '" + req + "'");
  18. e.code = 'MODULE_NOT_FOUND';
  19. throw e;
  20. }
  21. return map[req];
  22. }
  23. webpackContext.keys = function webpackContextKeys() {
  24. return Object.keys(map);
  25. };
  26. webpackContext.resolve = webpackContextResolve;
  27. module.exports = webpackContext;
  28. webpackContext.id = "../require.context/templates sync recursive ^\\.\\/.*$";
  29. /***/ })
  30. ...