我刚刚将我的反应应用程序从webpack 1更新到webpack 2.然而,我的捆绑包大小增加了~30Kb。我希望捆绑的大小会减少,我怎么能确认树摇动的效果。为什么增加?
答案 0 :(得分:3)
TL; DR:从版本2.3开始,webpack没有任何树摇动。它只使用UglifyJS来删除未使用的代码。
首先,我们必须定义什么是树摇动。
Stackoverflow将其定义为"用于现代javascript的死代码消除算法"。
Webpack澄清它依赖于ES2015模块导入/导出其模块系统的静态结构。
Rollup(最初推广该术语)也有类似的解释。
因此,我们可以推导出一个特定的定义:静态排除未使用的ES模块导出。
现在,让我们看看每个模块通常具有哪些转换阶段:
module: false
)unused: true
)现在,我们可以看到虽然uglify可以删除未使用的导出,但它实际上并不依赖于ES模块语法。它只是一个通用的死代码消除因此它不能被定义为"树摇动"。
那么我们怎样才能确定webpack是否有树摇动?
现在如果webpack实际上实现了树摇动算法,我们可以通过查看此入口点的包大小来确认它:
import { keyBy } from 'lodash-es'; // lodash is in ES module format
console.log(keyBy([{ key: 'value' }], 'key'));
如果webpack确实有树摇动,结果应该是几十千字节。如果它不是半兆字节或更多。
答案 1 :(得分:1)