我刚刚完成更新我的反应apppack从webpack 1到webpack 2.但是,我的包大小增加了〜30Kb。我希望捆包大小会减少,我如何确认树木摇晃的工作。为什么增加?如何确认抖动树是否与Webpack 2一起工作?
6
A
回答
1
0
TL; DR:从2.3版开始,webpack没有任何树震动。它仅使用UglifyJS来删除未使用的代码。
首先我们必须定义什么是树抖动。
Stackoverflow将其定义为“现代javascript的死码消除算法”。
Webpack澄清说,它依赖于ES2015模块导入/导出模块系统的静态结构。
汇总(最初推广这个术语)也有类似的解释。
所以我们可以推导出一个特定的定义:静态排除未使用的ES模块输出。
现在,让我们看看哪些转型的阶段,每个模块通常有:
- 巴贝尔装载机被送入一个入口点,这是在一些模块格式的JavaScript文件。巴贝尔可以将其转换到另一个模块格式保留原样(
module: false
) - 的WebPack将静态解析该文件并找到导入的模块(使用某种正则表达式的)
- 的WebPack要么变换模块格式(如果巴贝尔不会变形)或添加一些包装(对于commonjs模块)
- 导入的模块成为入口点并转到babel-loader
- 所有模块加载并转换后,uglify将处理结果bunle并删除未使用的代码(
unused: true
)
现在,我们可以看到,虽然uglify可以删除未使用的导出,但它实际上并不依赖ES模块语法。这只是一个通用的死代码消除,因此它不能被定义为“树抖动”。
那么我们该如何确认webpack是否有抖动树?
- 首先,所有的代码必须是ES模块格式。
- 正如在另一个答案中已经提到,我们必须禁用Uglify。
- 我们还必须禁用babel的模块转换,因为我们无法知道在该阶段是否使用了模块。
现在,如果的WebPack真正实现一棵树摇动的算法,我们可以通过查看这个切入点的集束大小确认:
import { keyBy } from 'lodash-es'; // lodash is in ES module format
console.log(keyBy([{ key: 'value' }], 'key'));
如果的WebPack确实有树摇晃的结果应该是几十千字节。如果不是,它会是半兆或更多。
相关问题
- 1. Webpack ES2015与React抖动
- 2. 如何确定Java连接池是否与URLConnection一起工作?
- 3. 如何验证AoT是否在工作[Webpack 2,Angular 2]?
- 4. Webpack 2配置树抖动和延迟加载与System.import React项目
- 5. 如何使用WebPack或Rollup树抖动Three.js?
- 6. 如何让webpack和iis一起工作?
- 7. 使jQuery-Mobile与webpack一起工作
- 8. Bootstrap datepicker不能与Webpack一起工作
- 9. document.getElementById不与Webpack一起工作
- 10. useAsDefault不能与Electron + Webpack实现一起工作? (Angular 2)
- 11. Tycho是否与Eclipse一起工作3.5
- 12. inMobi是否与appMobi一起工作?
- 13. tsvector是否与citext一起工作
- 14. 如何禁用rollupjs中的树抖动
- 15. 确定Gossip协议是否与Cassandra一起工作?
- 16. 抖动与有序抖动
- 17. 使用webpack和打字稿抖动的树
- 18. 获取Grommet与webpack 2一起使用
- 19. 我们是否需要使用webpack和typescript/angular2进行抖动?
- 20. 如何使用猫鼬类型与角2 Webpack起动器
- 21. d3 V4 d3.stratify如何与树一起工作?
- 22. 如何让swank与树桩一起工作?
- 23. 如何让Qt树模型与QSet一起工作?
- 24. 是否asp.net mvc windows authntication与工作组一起工作
- 25. 确认选择不按预期与jQuery 10.1一起工作
- 26. NSUndoManager是否可以在iPhone上无抖动手势地工作?
- 27. 让laravel与Apache 2一起工作
- 28. 如何确认.htaccess是否正常工作?
- 29. 如何让这3件事情一起工作:webpack,less和angular 2+?
- 30. javascript如何确认工作?
我按照webpack迁移指南进行更新。因此,对于第1步,我应该设置** minimize:false;在LoaderOptionsPlugin **中或者只是从生产环境插件中删除uglify,并且对于步骤2,我是否搜索捆绑的js文件以查看是否包含注释? – jasan