Rush方案
- 多项目并存下,Symlink实现依赖只需一套,无重复安装
- 提供项目间的自动link
- 多线程构建多项目,加快构建速度
- 自动检测有改动的项目,按配置产出版本号和changelog
Symlink(符号链接)
Rush一次性安装全部原始依赖在Root下的common/temp目录下,从该目录下提供Symlink给单个项目引用。
Symlink只是提供指针,这样保证了对于依赖本身的更新会实时展现在项目中,且依然保有原有各项目的node_modules的结构
Rush支持pnpm
Symlink帮助Rush对于依赖重复安装的问题做的更加可控(消除phantom dependencies)和彻底(消除doppelgangers)
phantom dependencies
指没有在package.json里制定安装,却可以在项目中被引用的依赖项。这可能会导致依赖版本不相容和依赖丢失的情况。
发布方案
- rush.json中可配置区分需要发布和不必要发布的包
- 根据上面配置,rush publish自动升级版本号并发布有过更新的包,这两个也可分开执行
- rush change帮助产出简介规范的change log,没有change log的改动会导致CI失败
Rush好处
- 规范性强,配置细分、各司其职
- 消除phantom,可控性更强
- 消除doppelgangers减少依赖冗余更彻底
- 可以实现更智能的版本选择
- 支持npm/yarn/pnpm,其中pnpm是Lerna不支持的
- 对change log的更新支持更好,Lerna则需要扩展
Lerna好处
- 当前使用最广,经过各大型项目检验
- 配置简单,可扩展性好
- 版本号管理有成熟的fixed/independent两种模式,Rush的Version Policy目前还是实验性功能。
结论
- rush的使用是咦monorepo风格为前提的
- 通过symlink实现减少重复依赖和消除phantom、doppelgangers
- 提供了专业的改动和发布管理方案
- 接入方便简洁
- 对比Lerna更专业,但优势不明显,如果没有Rush优势的需求,更建议使用Lerna
了解Rush还需要了解的知识点:
- npm:如何发布自己的npm包
- pnpm:rush支持的包管理器对pnpm的支持比较完善。部分npm包支持有问题,所以需要知道如何配置
- git