# @codependix/boundaries 中文文档

规范地址：https://npmcn.com/package/%40codependix/boundaries/

版本：0\.0\.75
npm 元数据更新时间：2026-11-10T03:11:23.339Z
中文译文更新时间：2026-11-10T07:25:18.895Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40codependix/boundaries
原文对照：https://npmcn.com/package/%40codependix/boundaries/?lang=original
项目主页：https://github.com/organizzolini/codebase/tree/main/projects/ic-suite/codependix/codependix-boundaries#readme
源码仓库：https://github.com/organizzolini/codebase

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：108 kB，6 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- 运行依赖：7 个
- 首次发布：2026-10-05T00:30:12.708Z
- 最新版本发布：2026-11-10T03:11:22.968Z
- 近 30 天下载量：9606（2026-10-10 至 2026-11-08，npm 官方下载统计）
- 已发布版本数：73（近 12 个月 73 个）

## 中文简介

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

## 安装

```sh
npm install @codependix/boundaries
```

也可以使用：`pnpm add @codependix/boundaries`、`yarn add @codependix/boundaries`、`bun add @codependix/boundaries`

## README

# 编码边界

[![npm](https://img.shields.io/npm/v/@codependix/boundaries?logo=npm&label=npm)](https://www.npmjs.com/package/@codependix/boundaries)

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

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

```bash
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`](https://npmcn.com/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` |
| `project` | Nx 项目的节点属于 | `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` 这么说,所以 两者不能结束循环.

## 测试

```bash
nx run codependix-boundaries:vitest
```

## \* 调和

这个项目源于 [巢-服务-项目](https://npmcn.com/configuration/conformetry-templates/nestjs-service-project) 符合模板.

## 常见问题

### @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 和提交记录判断。

