{title="📊 页面导航】

适用角色与上手难度

角色推荐度上手难度
🛠️ 开发★★★★★★★★★☆
🧪 测试★★★★☆★★★★☆
📦 产品★☆☆☆☆★★★★★

🎯 学习产出: 掌握 dependency-cruiser 深层模块强制配置,能把包结构约束为入口点即公共表面

🚀 AI 能力提升: 架构约束、代码导航

setup-ts-deep-modules

预计阅读时间: 3 分钟

TS 深层模块(beta)。给 TypeScript 仓库接上 dependency-cruiser,让每个包都是深层模块:包的公共表面是它的入口点(包根部的文件),子文件夹里全是实现(对外隐藏、只能通过入口点进入),然后证明规则真的会咬人。

概述

词汇来自 codebase-design(深层模块、接口、接缝、深度)——调用 Skill 工具 "codebase-design" 并全程用它的话。

日常使用

/setup-ts-deep-modules

强制出的形状

src/packages/
  <name>/
    index.ts        ← 入口点(公开),外部从这里 import
    client.ts       ← 另一个入口点,包可以暴露多个
    lib/            ← 实现:对外隐藏,内部自由互相 import
    tests/          ← 同地测试 + fixtures(子文件夹,因此私有)

入口点不是 barrel:公共表面是每个根文件,所以包可以暴露几个小入口点(index.tsclient.tsserver.ts)而不是全塞进一个巨型 index.ts鼓励小入口点,实现藏进子文件夹。规则本身是通用的:任何子文件夹里的任何东西都是私有的——你永远不用为加文件夹扩展配置。

四条规则(全部 error

  1. 入口点边界:包外代码(app 代码或其它包)只能 import 该包的入口点(根文件),绝不 import 子文件夹里的东西
  2. 包内自由:包自己的文件互相随便 import
  3. 测试走入口点<pkg>/tests/ 下的文件可以 import 任何包的入口点和自己的 tests/ fixtures,但绝不 import 任何包的子文件夹内部(自己的也不行)。跨包集成测试可以,深 import 不行
  4. 无循环:依赖不能成环

分层(哪个包能依赖哪个)是不同的问题——配置里留了注释 stub 让仓库自己填。

与其它技能的关系

  • 词汇codebase-design 的深层模块语言
  • beta 状态:排除在插件和顶层 README 之外,可随时变化