用途:在 TypeScript 仓库中建立包边界约束,让每个包成为深模块——大量行为藏在子文件夹里,只通过包根目录的入口文件对外暴露。
主要能力:安装 dependency-cruiser 并写入四条 error 级规则:入口边界(包外代码只能导入包的根文件,不能导入子文件夹内容)、包内自由(包自身文件可互相导入)、测试走入口(tests/ 下文件只能导入各包入口和自身 fixtures,不能导入任何包子文件夹内部)、禁止循环依赖。公共面是包的所有根文件,因此一个包可暴露多个小入口(如 index.ts、client.ts、server.ts),不鼓励用 barrel 文件重导出整棵子树。分层(哪些包可依赖哪些包)不在本技能范围,配置中留作注释占位。
使用方式:先探测环境(依据 pnpm-lock.yaml/yarn.lock/bun.lockb 判断包管理器;有 src/ 则用 src/packages,否则用 packages;检查是否已有 .dependency-cruiser.* 配置,有则合并而非覆盖)。然后以 devDependency 安装 dependency-cruiser,把配置复制为仓库根目录的 .dependency-cruiser.cjs 并设置 PACKAGES_ROOT,添加 lint:boundaries 脚本(depcruise <packages-root>)并并入已有的 typecheck 总检查命令,不修改 tsconfig、不加路径别名。接着创建可复制的 example 包(index.ts 入口、lib/impl.ts 内部实现、tests/example.test.ts 只导入入口)。最后验证规则生效:干净示例应通过;临时在测试中加入深层导入(如 import { thing } from "../lib/impl")应报 tests-through-entrypoints 失败;还原后再次通过。
适用场景:需要强制包边界、隐藏实现细节、避免深层导入的 TypeScript 单仓或多包仓库。
限制:规则基于路径深度且与扩展名无关,任何子文件夹都视为私有;包为扁平结构,包内可任意嵌套但包不能包含包;配置须用 .cjs 以兼容 "type": "module" 仓库;分层规则需自行补充。收费、价格、平台等信息暂未提供。