首页/开发/代码质量与评审速查/Monorepo 的分层 lint 策略
规范与静态检查65 条

Monorepo 的分层 lint 策略

多包仓库按边界拆检查:每包独立配置与忽略清单,共享预设避免漂移;CI 只对变更包及其依赖方执行,兼顾时间与覆盖。

Monorepo 里的分层检查策略

多包仓库把多个模块放在同一仓库,检查策略要按边界拆分:每个包有自己的配置与忽略清单,公共规则抽成共享预设由各包继承,避免各包规则悄悄分叉。执行层面只对变更涉及的包启动检查,而不是全仓扫描。这样做的目的是让检查时间随变更规模增长,而不是随仓库规模增长。

策略要点

边界按包或目录独立配置,规则差异写在本地
共享公司或仓库级预设,通过继承下发统一规则
提速只检查变更包及其依赖方(受影响集)
一致性预设升级后所有包同步受益,避免版本漂移

典型使用场景

  • 仓库包含十几个包:全量检查要十几分钟,改为变更集驱动后压到分钟级
  • 包之间依赖关系复杂:根据依赖图计算受影响包,避免只检查变更包而漏掉下游
  • 不同包技术栈不同:共享预设只放通用规则,语言特有限制放在各自包里
  • 多团队共用一个仓库:各团队维护自己的包配置,公共规则由平台团队维护
  • 本地开发提速:开发者只跑自己包的检查,提交前钩子同时校验受影响包

受影响集的计算思路

受影响集的计算思路
# 计算流程
1. 从 git diff 得到变更文件列表
2. 把文件映射到所属包目录(包清单由工作区配置提供)
3. 在依赖图上做反向闭包,得到依赖这些包的下游包
4. 仅对受影响包执行检查、构建与测试
5. 仓库级配置或共享预设变更时,视为全量受影响

配置分层对照

层级内容变更影响
仓库级预设规则集、格式化选项、忽略清单基线变更即全量生效,需要全仓回归
包级配置语言特有限制、目录忽略、覆盖规则只影响本包
工作区配置包清单与依赖关系声明变更影响受影响集计算,需谨慎
CI 配置检查触发条件与缓存策略变更影响流水线行为,需评审
共享预设的升级要单独提交并附迁移说明:规则收紧会让多个包同时变红,混在功能提交里无法判断红项来自代码还是规则。
受影响集计算的前提是依赖声明准确。若包之间的隐式依赖(例如通过共享脚本或环境变量耦合)没有被声明,反向闭包会漏掉下游包,出现本地通过而集成失败的情况。

落地检查清单

  • 每个包的配置文件与依赖声明齐全,新增包时有模板可依
  • 仓库级预设变更时触发全量检查
  • 受影响集脚本本身有测试,避免依赖图解析错误静默漏包
  • 忽略清单里的每一项都能说明原因

易错点

  • 根目录一把梭全量检查:仓库变大后单次检查时长线性增长,开发者开始绕过提交前钩子
  • 各包配置复制粘贴:公共规则升级只覆盖一部分包,同一问题在不同包表现不一致
  • 受影响集只算变更包不算下游:下游包未被检查,集成阶段才暴露问题
  • 忽略共享预设的影响面:改一条公共规则没跑全量,多个包在合并后集体变红

数据来源与参考

  • Nx 文档(affected 任务)、Turborepo 文档(过滤执行)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌