更好的treeshaking
嵌套对象打包,未引用的值不会被打包
// app1.js
export const a = {
b: {
c: 1,
b: 2,
},
};
// app2.js
import { a } from "./app1";
export const test2 = () => {
return a.b.b;
};
//index.js
import { test2 } from "./app2";
console.log(test2)
<a name="sP5rF"></a>
### webpack4 打包结果:
```javascript
function(e,t,r){"use strict";r.r(t);const n={c:1,b:2};console.log(()=>n.b)}]
webpack5 打包结果:
(()=>{"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的加强版