创建vendor chunk 和多入口公用的common chunk 。
共有三个入口_pageA, pageB, pageC 。_这三个入口公用一些模块,以下配置会把至少有两个入口公用的模块单独打包,同时node_modules里的模块也单独打包。

webpack.config.js

  1. var path = require("path");
  2. module.exports = {
  3. // mode: "development" || "production",
  4. entry: {
  5. pageA: "./pageA",
  6. pageB: "./pageB",
  7. pageC: "./pageC"
  8. },
  9. optimization: {
  10. chunkIds: "named",
  11. splitChunks: {
  12. cacheGroups: {
  13. commons: {
  14. chunks: "initial",
  15. minChunks: 2,
  16. maxInitialRequests: 5, // The default limit is too small to showcase the effect
  17. minSize: 0 // This is example is too small to create commons chunks
  18. },
  19. vendor: {
  20. test: /node_modules/,
  21. chunks: "initial",
  22. name: "vendor",
  23. priority: 10,
  24. enforce: true
  25. }
  26. }
  27. }
  28. },
  29. output: {
  30. path: path.join(__dirname, "dist"),
  31. filename: "[name].js"
  32. }
  33. };

pageA.js

  1. var vendor1 = require('vendor1');
  2. var utility1 = require('./utility1');
  3. var utility2 = require('./utility2');
  4. module.exports = "pageA";

pageB.js

  1. var vendor2 = require('vendor2');
  2. var utility2 = require('./utility2');
  3. var utility3 = require('./utility3');
  4. module.exports = "pageB";

pageC.js

  1. var utility2 = require('./utility2');
  2. var utility3 = require('./utility3');
  3. module.exports = "pageC";

依赖关系:

  • pageA
    • utility1
    • utility2
  • pageB
    • utility2
    • utility3
  • pageC
    • utility2
    • utility3

打包后的文件

  • vendor
    • vendor1
    • vendor2
  • common
    • utility2
    • utility3
  • pageA
    • pageA
    • utility1
  • pageB
    • pageB
  • pageC
    • pageC