Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

一个自动化打包构建的思路 #114

Open
hanbf opened this issue May 4, 2016 · 1 comment
Open

一个自动化打包构建的思路 #114

hanbf opened this issue May 4, 2016 · 1 comment
Assignees

Comments

@hanbf
Copy link

hanbf commented May 4, 2016

问题

  1. 现在凤巢业务端前端,module.conf中的combine都是手工维护,exclude规则比较复杂,常有业务修改造成线上未打包的散文件冒出来。
  2. 各个包之间较多模块重复,打包时间浪费,载入时间浪费。

解决

实现自动化的打包构建,即,无论源代码怎么变,都能够保证尽量优化的,重复模块尽量少的,不需人工干预的打包js文件,不出现散文件。

  • 初始化,src/下所有的js以及其引用的js作为一个大包A。
  • 根据业务特性指定一些组件从A中拆出,拆出的模块集合为B。如针对凤巢:
    • entry ER action
    • fc-component-ria
  • B中所有模块加上(A-B),提取其公共模块。当一个模块在其他模块中重复比例达到阈值p以上时,则为公共模块。所有的公共模块为C。这一环节可以细化,直觉上,重复越多的模块,越底层,改动越少,为照顾cache命中率,可以为不同级别的p打出多个C。比如在50%以上的模块中都引用过的模块打包为c1,30%~50%的模块中引用过的模块打包为c2。
  • 包D=A-B-C。
  • HTML中加载包D、C。B按需加载。
@leeight leeight self-assigned this May 4, 2016
@errorrik
Copy link

errorrik commented May 4, 2016

module.conf的combine配置是我设计的,我说两句。

不难发现,module.conf配置很原始。理论上你可以做到配置出任何组合,但实际上写的很累。其原因是:这东西对于定制化打包,最初设计时就不是让人写的。

  1. 对于不太在乎的产品线,直接把要combine的模块设置成true,会打包所有依赖
  2. 需要定制化的产品线,其实有自己的打包策略,edp-build并不能知道你的策略是啥

楼主在“解决”部分描述的,就是你产品线的打包策略。我觉得对于这种需求,应该写一个自己产品线的分析器,分析自己产品线中所有模块,生成combine配置

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants