背景
Monorepo 解决了代码放在哪里,却不会自动解决谁可以依赖谁。一个工具包反向依赖业务层,很快会让整个仓库无法独立演进。
核心判断
- 画出允许的依赖方向,公共入口仅导出稳定契约。
- 项目引用描述编译依赖,包 exports 与 lint 管理实际导入路径。
- 构建缓存键包含源码、依赖版本和配置输入。
最小示例
下面保留核心逻辑;业务类型、调用入口和环境配置按项目补齐。
{ "references": [{ "path": "../domain" }], "compilerOptions": { "composite": true, "declaration": true } }
边界与误区
project references 不等于访问控制,也不会自动阻止跨包深层导入。composite 项目的输出目录和包解析必须与运行方式匹配。
验证方式
新增一个故意违规的导入,确认 lint 能拦截;修改底层包,检查受影响包重建,干净环境仍能按依赖顺序完成构建。
小结
每个包只暴露稳定入口,规定依赖方向并阻止通过深层路径绕过边界。