参考资料:
白鹭引擎首席架构师@王泽:框架开发中的基础设施搭建
ppt | 视频

基于lerna+yarn workspaces的monorepo项目实践 | 源码demo
vivo基于Lerna 管理 packages的Monorepo项目最佳实践
雪碧大佬:如何管理前端项目中的复杂依赖关系
字节跳动杨健:基于lerna和yarn workspace的monorepo工作流

白鹭

与业务类功能开发相比,框架对代码质量和可维护性会提出更高的要求,诸如模块拆分、单元测试、版本控制等
白鹭引擎最新产品 Egret Pro 在这方面的工程实践。包括:

  1. 使用 monorepo 的设计思想以及 rush.js 进行代码管理
  2. 使用 mocha / karma / sinon 进行单元测试
  3. 使用 ts-morph 进行源代码检查与批处理

image.png image.png

image.png image.png
只想升级一个模块,比如common里 的 某个 log模块,我更新了log只想更新这一个 而不是将common模块都更新
解决办法:log一个仓库,一个package.json
问题:维护多个repo太累了
image.png
终极解决方案:monorepo
image.png
image.png

  1. components
  2. - component-a # 依赖lib-b、 my-compile
  3. - package.json
  4. libraries
  5. - lib-a
  6. - lib-b #依赖lib-a、 my-compile
  7. project
  8. - proj-a # 依赖component-a、 my-compile
  9. utils
  10. - my-compile

每个下面都有单独的package.json
如果上游的my-compile变化,那么下游的 lib-b\componrnt-a\proj-a 都要测试回归