1. 用声明式规则统一 monorepo 依赖
- 约束(Constraints)是 Yarn 提供的一种在多个 workspace 间强制执行通用规则的能力
- 通过在项目根目录放置 yarn.config.cjs(或 .ts、.mjs)文件,导出 constraints 方法即可定义规则
- 典型用途包括:确保所有 workspace 使用同一版本的 React、强制每个包都声明 license 字段、禁止使用特定依赖等
2. 声明式模型与自动修复
- 约束采用声明式模型:开发者只需声明期望的状态,Yarn 负责检查实际是否匹配
- 运行 yarn constraints 会在规则不满足时抛出错误;运行 yarn constraints --fix 则会尝试自动修复问题
- 正因为是声明式的,规则内部不应自行判断当前值再决定是否更新,而应直接调用 update 等方法声明目标状态
3. 相比静态检查的独特优势
- 与 ESLint 之类的静态检查不同,约束引擎能够访问整个项目的依赖树
- 因此它可以实施静态分析难以实现的规则,例如循环依赖检测、跨包版本一致性校验等
- Yarn 还提供了 @yarnpkg/types 类型包,便于用 TypeScript 编写约束配置