yyfearth
2018-05-13 17:24:00 +08:00
这里 webpack 坑比较多 我现在都是不用打包的组件 直接引用源代码 基本上就是你第一种方法
导出 bundle 其实也可以 但是你 external react 是不够的 要 external 所有的 依赖 除非你 100% 确定这个依赖是你这个组件独有的
external 所有依赖后 bundle 文件就比较小了 而且不用担心 因为整个项目的 webpack 会把依赖打包进去
否则同一个依赖 如果其他地方有用到 会被打包多次 造成文件非常大
另外如果项目的多个组件用了不同版本的依赖 多个版本会被打包起来 导致最终 bundle 非常大
最容易碰到的例子就是 lodash 和 moment 两个库 本身就挺大的 加上不同组件及其依赖使用了不同版本或者不同发布方式的版本
比如 lodash 有 cjs 版本 es 版本 模块化的 cjs 版本 模块独立的发布的 cjs 版本 而且每种还可能有不同的 version 我之前就遇到过一个项目里面 lodash 就 4-5 个不同的拷贝被打包 每个 10k - 90k 不等
然后是 moment 的 locale 需要在打包的时候排除 否则非常大
这个可以通过修改 webpack 的配置来统一版本
我接触过的一个项目 一开始每个组件自己 bundle 然后项目再 bundle 结果各种重复打包 一个简单的 webapp 可以到 10M 的 JS bundle
通过各种办法 在没有减少任何功能 组件 和 依赖的情况下 减少到 250K JS + 100K CSS + 80K 字体文件