dependency-cruiser 配置 Schema 体系:从单一事实来源到运行时校验的生成工作流
开发工具静态分析代码质量【免费下载链接】dependency-cruiserValidate and visualize dependencies. Your rules. JavaScript, TypeScript, CoffeeScript. ES6, CommonJS, AMD.项目地址https://gitcode.com/gh_mirrors/de/dependency-cruiser点击查看免费下载本篇技术指南聚焦 dependency-cruiser 仓库中的src/schema/目录讲解其 JSON Schema配置 Schema 与巡航结果 Schema如何由tools/schema/下的源定义生成、如何通过 Ajv 编译成独立校验器以及这些校验器如何在 CLI 运行时与格式化阶段被真实调用。读完本文你将掌握该项目的 Schema 生成脚本、Makefile 自动化规则、产物形态与运行时消费链路并能独立完成修改 Schema 定义 → 重新生成 → 验证生效的完整操作。一、src/schema/README.md说了什么一条源定义 → 生成产物的工作流仓库根目录下的 src/schema/README.md 用极简的篇幅定义了本目录的维护纪律是理解整个 Schema 体系的入口src/schema/下的 JSON Schema 文件由tools/generate-schemas.utl.mjs脚本生成其中的校验器文件由tools/generate-schema-validator.utl.mjs脚本生成如果需要对 Schema 做修改不要直接编辑src/schema/下的生成产物而是修改 tools/schema/ 中的源定义修改之后重新运行生成脚本既可以执行make也可以分别运行node tools/generate-schemas.utl.mjs与node tools/generate-schema-validator.utl.mjs。这条规则意味着src/schema/是一个生成目录它的内容全部是机器产物而tools/schema/才是人工维护的单一事实来源Single Source of Truth。二、单一事实来源tools/schema/下的 Schema 源定义tools/schema/目录以 ES Module.mjs形式组织 Schema 定义共约三十个模块按职责可分为几组顶层配置组合configuration.schema.mjs、cruise-result.schema.mjs、baseline-violations.schema.mjs规则集定义rule-set.mjsforbidden/allowed/allowedSeverity/required、restrictions.mjsfrom/to等约束类型、severity-type.mjs巡航选项定义options.mjs、cache-options.mjs、compound-*-type.mjsdoNotFollow、exclude、includeOnly、focus、highlight、reaches等复合类型、module-systems-type.mjs、output-type.mjs、reporter-options.mjs、experimental-stats-type.mjs巡航结果结构modules.mjs、dependencies.mjs、dependency-type.mjs、mini-dependency-type.mjs、folders.mjs、summary.mjs、violations.mjs、violation-type.mjs、rule-summary.mjs、revision-data.mjs、options-used.mjs等。以 tools/schema/configuration.schema.mjs 为例顶层配置 Schema 通过模块组合完成properties直接展开ruleSet.properties再追加options与extends两个引用definitions则合并ruleSet.definitions、options.definitions与自定义的ExtendsType支持单个字符串或字符串数组表示该配置所继承的基配置。ruleSet.properties则由 tools/schema/rule-set.mjs 提供forbidden禁止的依赖规则、allowed允许的依赖规则违反时输出not-in-allowed警告、allowedSeveritynot-in-allowed的严重级别默认warn与required模块必须具备的依赖例如每个 controller 必须直接依赖 base controller。所有规则类型均设置additionalProperties: false杜绝未知字段静默通过。三、三种产物形态.schema.json、.schema.mjs与.validate.mjs生成脚本会产出三种文件各自承担不同角色产物示例用途可读 JSON Schemasrc/schema/configuration.schema.json面向人阅读、IDE 提示与外部工具如编辑器基于$schema做自动补全紧凑 ESM Schemasrc/schema/configuration.schema.mjs中间产物Makefile 会在校验器生成后清理供生成校验器时以 JS 模块形式被import独立校验器src/schema/configuration.validate.mjs、src/schema/cruise-result.validate.mjs运行时被 CLI 直接调用校验配置与巡航结果其中 src/schema/configuration.schema.json 声明了$id: https://dependency-cruiser.js.org/schema/configuration.schema.json顶层properties仅允许$schema、forbidden、allowed、allowedSeverity、required、options、extends七个键并整体设置additionalProperties: false。四、生成脚本剖析tools/generate-schemas.utl.mjssrc/schema/README.md 指定的第一个生成脚本是 tools/generate-schemas.utl.mjs其关键行为如下1. 按目标文件扩展名分派输出格式emitConsolidatedSchema(pOutputFileName)依据扩展名决定产物形态目标是.json时用 prettier 的jsonparser 对JSON.stringify(schema.default)做格式化后写入目标是.mjs时先通过stripAttribute递归删除所有description字段减小体积拼装成/* generated - dont edit */ export default {...}形式的 ESM 模块再用 prettier 的 babel parser 格式化、最后经babel/core的transformSync(..., { minified: true })压缩后写入。2. 通过正则推导输入模块名getInputModuleName(pOutputFileName)从输出路径如./src/schema/configuration.schema.json反推输入源定义./configuration.schema.mjs即tools/schema/下同名.schema.mjs模块。3. 强制 Node 权限模型脚本开头检查process.permission并要求在 Node 的 Permission Model--permission下运行随后尝试drop对..与/的读写权限缩小脚本自身的能力边界。用法为node tools/generate-schemas.utl.mjs ./src/schema/configuration.schema.json五、校验器生成剖析tools/generate-schema-validator.utl.mjssrc/schema/README.md 指定的第二个脚本是 tools/generate-schema-validator.utl.mjs。它基于 Ajv 的 standalone 代码生成能力用new Ajv({ code: { source: true, esm: true } })创建编译器实例产出 ESM 形态的源码级校验代码import输入的.schema.mjs并ajv.compile(schema.default)调用standaloneCode(ajv, validate)把编译结果导出为不依赖 Ajv 运行时的独立模块写入输出文件。用法脚本自带 Usage 示例node tools/generate-schema-validator.utl.mjs ./src/schema/configuration.schema.mjs ./src/schema/configuration.validate.mjs生成出的 src/schema/configuration.validate.mjs 是压缩后的 ESM开头即export const validatede;export default de;全部校验逻辑内联为普通函数如对SeverityType的[error,warn,info,ignore]枚举、对dependencyTypes的约四十个枚举值的逐项检查、对additionalProperties的键白名单检查等可被任何 ESM 环境直接 import 使用。六、Makefile 自动化make build一键重建Makefile 将上述两步脚本编排成 make 规则README 中重新运行生成脚本either by runningmake...指的就是这套自动化build目标依赖三组文件GENERATED_SOURCESbaseline-violations.schema.mjs/json、configuration.schema.json、cruise-result.schema.json、src/meta.cjs、GENERATED_VALIDATORS两个.validate.mjs生产规则src/%.schema.mjs: tools/%.schema.mjs $(SCHEMA_SOURCES) tools/generate-schemas.utl.mjs与同款.json规则把tools/schema/源定义连同全部SCHEMA_SOURCES一起作为依赖用$(NODE) --allow-fs-read ./ --allow-fs-write ./src/schema/执行生成脚本这里的--permission正是脚本内部检查所要求的生产规则src/schema/%.validate.mjs: src/schema/%.schema.mjs tools/generate-schema-validator.utl.mjs先生成未压缩校验器随后npx esbuild --tree-shakingtrue --minify二次压缩最后$(RM) $删除作为中间产物的.schema.mjs所以在最终仓库里只见.schema.json与.validate.mjsclean目标删除全部生成产物help目标说明build与clean的用途。七、运行时消费链路校验器在 CLI 与格式化阶段被真实调用生成的校验器并非摆设而是贯穿 dependency-cruiser 主流程的硬性检查配置校验src/main/rule-set/assert-validity.mjs 导入#schema/configuration.validate.mjs在assertSchemaCompliance中调用validateConfigurationSchema(pConfiguration)校验失败即抛出The supplied configuration is not valid: ...并附上错误详情——这意味着任何非法配置在巡航开始前就会被拒绝结果校验src/main/format.mjs 导入#schema/cruise-result.validate.mjs在格式化输出前用validateCruiseResultSchema(pResult)校验巡航结果失败抛出The supplied dependency-cruiser result is not valid: ...错误格式化src/schema/utl.mjs 提供validateErrorsToString(pErrors)把 Ajv 错误数组instancePathmessage拼接成可读字符串供上述两处抛错使用。由此可以确认一条完整链路开发者修改tools/schema/源定义 →make build或两个node脚本重新生成src/schema/产物 → CLI 运行时经assert-validity.mjs用新校验器拦截非法配置。八、实践指引修改 Schema 的标准操作流程结合 src/schema/README.md 的约定与上述源码证据为 dependency-cruiser 扩展配置项的推荐流程是改源定义在 tools/schema/ 中编辑对应的.schema.mjs新增配置项时通常涉及options.mjs及其引用类型模块重新生成在仓库根目录执行make build若只想重建单个文件可按 README 给出的命令分别执行node tools/generate-schemas.utl.mjs与node tools/generate-schema-validator.utl.mjs注意脚本需要 Node 的--permission模式直接运行请参照 Makefile 中的$(NODE)定义补齐权限参数验证生效编写带新字段的.dependency-cruiser.cjs配置运行depcruise确认不再触发assertSchemaCompliance的抛错且旧配置仍可通过校验回归保持纪律绝不手工编辑src/schema/下的生成产物——它们带有生成标记或被压缩手工改动会在下次make build时被覆盖。对使用 dependency-cruiser 的普通用户而言同样能从这套体系受益在配置文件中声明$schema: https://dependency-cruiser.js.org/schema/configuration.schema.json编辑器即可基于仓库公开的 Schema 提供配置键补全与非法字段提示把大部分配置错误消灭在编写阶段而不是等到 CLI 运行时才收到The supplied configuration is not valid的报错。赞分享开发工具静态分析代码质量【免费下载链接】dependency-cruiserValidate and visualize dependencies. Your rules. JavaScript, TypeScript, CoffeeScript. ES6, CommonJS, AMD.项目地址https://gitcode.com/gh_mirrors/de/dependency-cruiser点击查看免费下载相关推荐oh-my-openagent 的生成式 Schema 制品体系从 Zod 到 JSON Schema 的单一事实来源流水线oh my openagent 的生成式 Schema 制品体系从 Zod 到 JSON Schema 的单一事实来源流水线 assets/ 目录是 oh m人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排OmO 配置体系中的 telemetry 配置项从 Zod 严格校验到统一 Schema 生成的全链路实现OmO 配置体系中的 telemetry 配置项从 Zod 严格校验到统一 Schema 生成的全链路实现 导读 本文基于 oh my openagent 仓人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排Relay 开发工作流从配置 Relay Compiler 到生成运行时产物Relay 开发工作流从配置 Relay Compiler 到生成运行时产物 本篇技术指南以 Relay v14 文档中的 Workflow 章节为核心讲解前端开发工具上一篇3D打印螺纹总卡死CustomThreads完整指南让Fusion 360螺纹一次旋合下一篇radix-vue HoverCardTrigger 深度解析:悬浮卡片触发器的定位锚点、事件语义与 Props 详解创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

wvp-GB28181-pro 开源项目安装中的坑

wvp-GB28181-pro 开源项目安装中的坑

wvp:web video platform 即 网页视频平台 开源下载地址:https://github.com/648540858/wvp-GB28181-pro/branches # 进入到安装目录 /opt/wvp-GB28181-pro-dev/docker/ # 1、先修改环境变量 .env 修改环境变量的三个IP: # Stream_IP…

2026/9/29 7:17:02 阅读更多 →
从 Earthquake 到新闻源:基于 p1xt-guides 构建 Android 联网新闻应用 News App 实战指南

从 Earthquake 到新闻源:基于 p1xt-guides 构建 Android 联网新闻应用 News App 实战指南

教程文档 【免费下载链接】p1xt-guides Programming curricula 项目地址: https://gitcode.com/gh_mirrors/p1/p1xt-guides 点击查看 免费下载 本文围绕编程课程仓库 p1xt-guides 中 Android 学习路径的整合型实践项目 News App(deprecated/projects/an…

2026/9/29 7:17:02 阅读更多 →
AI编程助手Skills全攻略:从安装到自定义开发

AI编程助手Skills全攻略:从安装到自定义开发

1. Skills是什么?从AI编程助手的“插件化”说起最近这半年,只要你在任何一个AI编程工具的社区里泡过,满屏都是“Skills”这个词。前端开发,数学建模,AI漫剧,甚至写论文、做表格,都能找到对应的S…

2026/9/29 7:16:02 阅读更多 →

最新新闻

【AI News | 20250508】每日AI进展:用 TaoToken 统一 Key 打通 Cline 与 CC Switch 配置

【AI News | 20250508】每日AI进展:用 TaoToken 统一 Key 打通 Cline 与 CC Switch 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/29 8:00:37 阅读更多 →
多属性决策MCDM实战:决策矩阵、熵权TOPSIS与方法验算

多属性决策MCDM实战:决策矩阵、熵权TOPSIS与方法验算

选型会开到第三个小时,会议室里的人还在吵。采购说A家的设备故障率低,生产说B家的交期更稳,财务说C家的三年总成本最低,工艺又补了一句D家的售后响应快。四个人四个维度,各自都有数据支撑,谁也说服不了谁。…

2026/9/29 8:00:37 阅读更多 →
mcp-searxng 配 TaoToken:Agent 搜索 MCP 服务 settings.json 骨架与连通验证

mcp-searxng 配 TaoToken:Agent 搜索 MCP 服务 settings.json 骨架与连通验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/29 8:00:37 阅读更多 →
Kali Linux 批量安装软件包:apt、dpkg、元包与离线复刻

Kali Linux 批量安装软件包:apt、dpkg、元包与离线复刻

新装完 Kali,真正花时间的往往不是分区也不是驱动,而是对着清单一个个敲包名。apt install敲一两次还行,敲到第三十个的时候手就开始烦了。这篇写的就是把"Linux 安装软件包"这件事一次做完:怎么把一长串包名塞进一条命…

2026/9/29 8:00:37 阅读更多 →
高校宿舍楼综合布线实战设计:千兆到床头、十年不返工

高校宿舍楼综合布线实战设计:千兆到床头、十年不返工

简介:本资源是一份面向高校网络工程、通信技术及相关专业学生的《综合布线实训教程》课程设计成果,聚焦学生宿舍楼这一典型场景,系统解决多终端接入、多业务融合(数据/语音/视频/安防)下的结构化布线规划与实施问题。内…

2026/9/29 8:00:37 阅读更多 →
算法通关手册(AlgoNote)开源仓库全景指南:从算法基础到 LeetCode 千题实战的完整学习路线

算法通关手册(AlgoNote)开源仓库全景指南:从算法基础到 LeetCode 千题实战的完整学习路线

教程文档知识库 【免费下载链接】AlgoNote ⛽️「算法通关手册」:从零开始的「算法与数据结构」学习教程,200 道「算法面试热门题目」,1000 道「LeetCode 题目解析」,持续更新中! 项目地址: https://gitcod…

2026/9/29 7:59:37 阅读更多 →

日新闻

开源模型端侧落地实战:量化、推理加速与Agent上下文管理

开源模型端侧落地实战:量化、推理加速与Agent上下文管理

1. 从"追平"到"端侧落地":开源模型这波到底变了什么如果你最近半年一直在关注模型圈的动态,应该能明显感觉到一个拐点:开源模型和闭源旗舰之间的差距,正在从"代差"变成"身位差"。以前大家…

2026/9/29 0:00:05 阅读更多 →
AI Evals实战指南:从零搭建LLM应用评估体系与CI/CD集成

AI Evals实战指南:从零搭建LLM应用评估体系与CI/CD集成

1. 为什么AI Evals值得你花时间搞明白做LLM应用的人,迟早会撞上同一堵墙:模型输出飘忽不定,今天答得好好的,明天换个问法就胡说八道。你改了一版提示词,感觉好像好了点,但到底好了多少?说不清。…

2026/9/29 0:00:05 阅读更多 →
Java采购管理系统实战:从数据库设计到事务一致性

Java采购管理系统实战:从数据库设计到事务一致性

简介:这是一套面向Java Web初学者与课程设计者的采购管理系统完整源码,采用JSP技术搭建,配合MySQL数据库,用于解决企业采购信息的管理问题,适合作为毕业设计、课程大作业或进销存类项目的参考模板。系统实现了用户登录…

2026/9/29 0:00:05 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/28 5:40:26 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/28 9:47:26 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/28 8:07:01 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/28 16:55:15 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →