TS深模块
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @kunlungrowth/setup-ts-deep-modules 技能到当前 AI 助手中。
技能介绍
解决包边界失控的问题
在大型 TypeScript 单体仓库中,随着业务迭代,包与包之间的依赖关系往往变得模糊。开发者经常直接 import 其他包内部子目录的实现文件,而不是通过公共 API。这种“浅模块”架构导致重构成本极高,内部逻辑的任何微小变动都可能引发级联的编译错误或运行时故障。深模块(Deep Modules)架构倡导将大量行为藏在实现子目录中,仅通过包根目录的入口点文件对外暴露接口,从而降低认知负荷并隔离变更。
核心能力与工作流
本技能作为架构边界助手,通过引入 dependency-cruiser 将“深模块”理念固化为可执行的代码检查规则,并自动完成闭环验证。
- 定义四条强制边界规则:在
.dependency-cruiser.cjs中生成均为error级别的规则:①包外代码只能import包根目录的入口点,严禁访问子目录;②包内部文件可自由互相import;③测试文件(tests/)可访问入口点和自身 fixture,但同样严禁触碰包内部子目录;④全局禁止循环依赖。 - 拒绝 Barrel 文件反模式:明确反对使用单一的
index.ts重导出整棵子树,而是允许每个根文件作为独立的小入口点暴露,保持接口的清晰与聚焦。 - 自动化接入与验证:自动检测包管理器与包根目录,将
lint:boundaries脚本并入现有的typecheck流程中,且不修改tsconfig或添加路径别名。随后构建/example/示例包,通过“添加深层import导致检查失败,还原后恢复通过”的步骤,切实证明规则具备拦截能力。
适用边界与注意事项
该技能专注于配置边界检查,而非重构业务代码实现。它不会复制或硬编码 dependency-cruiser 的具体配置脚本,而是描述规则逻辑交由环境生成。此外,关于分层架构(即谁依赖谁)的高层设计,仍需开发者在仓库中自行补充注释桩。下游的 TDD、代码审查等流程可基于生成的 BoundaryConfig 工件,确保新建代码持续遵守入口点约束。
使用场景
- 给单体仓库添加边界:需给 TS 单体仓库子包强制实施深模块架构,禁止外部直接 import 内部子目录时。
- 重构 TS 项目前配置 lint 脚本:需用 dependency-cruiser 配置 lint:boundaries 并接入 CI 验证包接口边界时。
- 验证边界规则有效性:故意在测试中添加深层 import,需确保自动化检查能正确拦截违规行为时。
- 规范测试依赖路径:编写单测时强制 tests/ 仅通过包根入口点导入,杜绝直接引用 lib/impl 内部文件。
适合人员
- TS 单体仓库维护者:希望控制包间耦合度,重构时避免内部实现变动引发级联编译错误。
- 架构边界工具链开发者:寻找自动化接入 dependency-cruiser 的流程,为代码审查提供边界约束规则。
- 底层公共库作者:想把复杂实现藏在子目录,仅通过入口点向其他项目暴露干净的 API。