@codependix/boundaries

中文文档
0.0.75发布于 2026/11/10MITTypeScriptES Module构建来源已验证近 30 天下载 9606

边界规则验证,禁止/允许规则执行,以及周期检测 Codependix 图

中文使用文档
文档目录6 节
  1. 为什么不是ESLint规则
  2. 规则模式
  3. 选择器
  4. 两半相接相接
  5. 测试
  6. * 调和

编码边界

npm

对照已经构建的图形编码本来评估已宣布的规则,并报告打破规则的边缘和周期.

Codependix 绘制了三个层次的图表,没有说明是否 允许形状。 这把文件工具变成大门 三级 – Nx 项目边缘, NestJS 模块边缘, 文件级导入 边缘, 每个语言分别判断, 即使类型脚本和 Python 是 一起导出 fileImports 图表类型.

codependix map --check boundaries --config configuration/codependix.config.ts

为什么不是ESLint规则

@nx/enforce-module-boundaries 读取导入语句,一次一个文件. 它在结构上看不出三个事实:

  1. 隐性边缘. 一个 Nx implicitDependencies 条目创建 a 没有导入语句可标记的工程图边 . NeighborhoodEdge 已携带 implicit,所以代码pendix 持有一个事实 林特规则没有 方法到达.
  2. 一个NestJS模块边缘是一个容器事实,而不是来源事实. NestjsProjectService.exploreProject 报告集装箱的解决方案, 所以是一个动态模块,a forRootAsync,或有条件的导入 产生边号 import 声明表示.
  3. 一个规则可以是关于图表,而不是边缘. 周期,或 project的从属关系,是一个关于形状的语句,以及看到 一次一个文件无法生成 .

这刻意做的事 没有 替换:分层 depConstraints 图中 configuration/eslint.config.ts,哪个 在导入站点上报告行号,以及 dependency-cruiser是因为 no-circular,这已经是此寄存器的文件循环门.

两者相互核对,而不是假定相等。 所有32个 这个仓库的 depConstraints 机械翻译—— onlyDependOnLibsWithTags 是一个 allow 规则, notDependOnLibsWithTags 是一个 forbid 规则,和一个空 onlyDependOnLibsWithTags 是一个 forbid 到达 所有东西——以及 edges: { implicit: false } 所有32个传球,完全就是 ESLint报告他们。 报告没有缩小另一个边: conformetry-examples → conformetry-cli,由 implicitDependencies 条目后没有导入语句。 自己买的 depConstraint 评论说 不应该存在依赖性,而ESLint也没什么可标注的。 是否这样 是发现还是假阳性是问题 edges 存在以让规则 答话.

规则模式

规则公布于 codependix.config.ts,按下图级键 审判他们.. nestjsModules, (中文(简体) ), nxProjects,以及 fileImports,该巢由 语言为 { typescript, python } 因为没有边缘永远跨越了两者。 A 类 宣布没有规则的关卡 根本不是建造的,这就是守住大门的原因 价格低廉:判断NestJS级别意味着将每个容器都装入 预览模式 .

两种形状和三种——一种进入规则,写作: from编号 :to 与 判决以这样或那样的方式进行,以及 acyclic 规则的范围 nodes数字 :

仁爱报告
forbid源头匹配的边缘 from 以及目标匹配者 to
allow一个边缘离开 from 给任何地方 to 不索赔
acyclic节点之间的循环 nodes 选择, 默认为每个节点

访问规则也可能缩小范围 边 它判断,而不是选择 它选择的节点 :

edges法官
未设定每一个边缘 — 更严格的读取, 和正确的默认 关于项目可能是什么的规则 取决于
{ implicit: false }仅由导入语句支持的边缘 @nx/enforce-module-boundaries depConstraint 看见了
{ implicit: true }仅边缘 implicitDependencies 条目声明和不导入回

只有 Nx 级别画出一个隐含的边缘;其他级别边缘读取为 明确.

每条规则都有一条 name 以及,可选的,a message 说它为什么存在. 讯息是 附 录 改为生成的句子,而不是替换 它,所以没有一个配置选择的措辞 成本报告规则 开火,两端都开火.

选择器

1个节点形状覆盖了3个词汇,每个字段都包含有光泽的列表 匹配为 path.matchesGlob数字 :

外地匹配备查
id节点的标识符 — 工程名称、 文件路径或模块类名称每一级
path工作空间相对项目根或项目相对文件路径nxProjects, (中文(简体) ), fileImports.typescript, (中文(简体) ), fileImports.python
projectNx 项目的节点属于nxProjects, (中文(简体) ), fileImports.typescript, (中文(简体) ), fileImports.python
tags节点的 Nx 标记; 一个标记匹配即可nxProjects

选择国必须匹配的每一个字段——字段相互缩小. 在一个领域,一个光彩相配就足够了。 选择者命名一个字段 级别不包含匹配 无 而不是一切:a path 规则 对照 NestJS 模块图表评估,该模块没有文件路径,选择 没有模块,而是默默地选择所有模块。 选择者表示否 字段被配置方案拒绝,因为它读取准确 就像打字一样.

两半相接相接

src/modules/boundaries/ 评估规则,对工作空间一无所知:a BoundaryGraph 并列出一个规则清单, 和违反情况. src/modules/boundary-check/ 将真正的工作空间变成那些图表 ——每关1个适配器,外加周围的管弦.

BoundaryGraph 这是缝合物 故意不是四个真正的 图表类型。 每个适配器平分 a Neighborhood页:1 NestjsModuleGraph,或 导入图,所以规则评价从未看到 @nx/devkit, (中文(简体) ), @nestjs/core,或 typescript 并且可以再次被提出 没有 触摸一个规则.

BoundaryCheckService.run 四个关卡走入 BOUNDARY_LEVEL_ORDER —— 说 最便宜的第一——和 跳过任何关卡,在构建前没有声明规则 任何东西。这就是让大门负担得起的原因:判断雀巢JS级别 表示在预览模式下启动每个容器,并判断类型脚本级别 意味着建设 ts.Program 每个项目。 一个只声明 Nx 规则的工作空间 两者都不付 每一级还隔离一个项目的失败 因此,一个不会启动的容器被收集为 BoundaryCheckFailure 而其他项目仍然在评判中.

这里的一切都不取决于 @codependix/cli - 东道主打电话来,从不 反向和规则 configuration/codependix.config.ts 这么说,所以 两者不能结束循环.

测试

nx run codependix-boundaries:vitest

* 调和

这个项目源于 巢-服务-项目 符合模板.

版本与发布记录

@codependix/boundaries 共发布 73 个版本,首次发布于 2026/10/05;过去 12 个月发布了 73 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.0.75latest2026/11/10今天
0.0.742026/11/091 天前
0.0.732026/11/091 天前
0.0.722026/11/091 天前
0.0.712026/11/082 天前
0.0.702026/11/073 天前

关于 @codependix/boundaries 的常见问题

@codependix/boundaries 是什么?

边界规则验证,禁止/允许规则执行,以及周期检测 Codependix 图

如何安装 @codependix/boundaries?

在项目目录运行 npm install @codependix/boundaries,或使用 pnpm add / yarn add / bun add。

@codependix/boundaries 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@codependix/boundaries 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@codependix/boundaries 可以商用吗?

@codependix/boundaries 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@codependix/boundaries 的下载量有多少?

根据 npm 官方下载统计,@codependix/boundaries 在 2026/10/10 – 2026/11/08 这 30 天内被下载 9,606 次,日均约 320 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@codependix/boundaries 还在维护吗?

最新版本 0.0.75 发布于 2026/11/10(今天);至今共发布 73 个版本,其中过去 12 个月发布了 73 个;首次发布于 2026/10/05。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。