更好的treeshaking

嵌套对象打包,未引用的值不会被打包

  1. // app1.js
  2. export const a = {
  3. b: {
  4. c: 1,
  5. b: 2,
  6. },
  7. };
  8. // app2.js
  9. import { a } from "./app1";
  10. export const test2 = () => {
  11. return a.b.b;
  12. };
  13. //index.js
  14. import { test2 } from "./app2";
  15. console.log(test2)
  1. <a name="sP5rF"></a>
  2. ### webpack4 打包结果:
  3. ```javascript
  4. function(e,t,r){"use strict";r.r(t);const n={c:1,b:2};console.log(()=>n.b)}]

webpack5 打包结果:

  1. (()=>{"use strict";const o=2;console.log((()=>o))})();

优化持久缓存

开发模式下,webapck打包是方式递归文件,打包后生成一个
graph 来记录文件依赖关系,之后将文件存放在内存中,每当更改文件,都会改变 graph,造成性能问题。webapck 引入增量编译的概念,Webpack 会读取记录做增量编译。之前使用cache-loader 与 babel-loader 的 cacheDirectory 属性进行文件缓存,v5 之后 默认开启 memory 模式,缓存

NodeJS 的 polyfill 脚本被移除

在 v4 及以前的版本中,对于大多数的 Node 模块会自动添加 polyfill 脚本,polyfill 会加到最终的 bundle 中,如:
crypto.js。
v5中可关闭 polyfill 来减少打包体积

模块联邦

支持两个 webacpk 引用共享资源,类似与 dll,external的加强版