如何通过命令行运行VSCode自定义json.schemas校验器并接入CI/CD
自定义JSON Schema校验命令行运行、工具集成与CI接入方案
命令行运行校验逻辑
VSCode内置的JSON Schema校验能力没有直接提供独立的CLI入口,不需要逆向提取VSCode内部组件,直接使用和VSCode校验核心同源的工具即可实现完全对齐的命令行校验效果:
- 核心校验工具选择
ajv-cli,VSCode底层JSON语言服务的校验逻辑就是基于Ajv库实现,校验规则、报错结果和编辑器内联提示完全一致。 - 先安装依赖:
npm install ajv-cli ajv-formats --save-dev - 在项目
package.json中添加校验脚本,匹配你当前配置的文件范围与Schema文件:
{ "scripts": { "lint:json": "ajv validate -s ./.vscode/superJsonConfig.json -d \"src/super_jsons/**/*.json\" --spec=draft7 --strict=false --all-errors" } }
注意添加
--strict=false参数,和VSCode默认的Schema校验宽松度对齐,避免出现编辑器不报错、命令行校验误报的问题;如果你的Schema使用了其他版本的规范,修改--spec参数为对应版本即可。
- 直接执行
npm run lint:json即可在命令行输出所有校验问题,校验不通过时进程会默认返回非0退出码,天然适配自动化流程的拦截需求。
与ESLint集成
完全支持和ESLint打通,有两种常用实现方式:
- 插件集成(推荐):使用
eslint-plugin-json-schema-validator插件,将JSON Schema校验完全纳入ESLint的规则体系,复用现有ESLint的报错等级、报告输出、忽略规则等能力。在ESLint配置文件中添加如下规则即可:
{ "plugins": ["json-schema-validator"], "overrides": [ { "files": ["src/super_jsons/**/*.json"], "rules": { "json-schema-validator/no-invalid": ["error", { "schema": ["./.vscode/superJsonConfig.json"] }] } } ] }
配置完成后,执行常规ESLint校验命令时会自动覆盖对应范围的JSON文件校验,你可以根据需求将规则等级调整为warn仅输出警告日志,或设为error直接触发校验失败。
- 脚本串联:如果不想新增ESLint插件,可以直接把前面编写的
lint:json校验脚本配置为ESLint命令的前置执行脚本,运行ESLint时自动触发JSON校验,效果一致。
接入CI/CD实现PR环节拦截
不管是使用独立的ajv-cli校验命令,还是将校验逻辑集成到ESLint中,都可以非常方便地接入PR流水线:
- 只需要把校验命令添加到PR环节的流水线执行步骤中即可,通用流程参考:
steps: - 拉取对应分支的仓库代码 - 安装项目全量依赖 - 执行JSON Schema校验:npm run lint:json # 已集成到ESLint的场景可直接执行现有lint命令,无需单独执行JSON校验 - 执行全量Lint校验:npm run lint
- 拦截规则可以灵活调整:如果仅需要在校验不通过时输出警告日志、不阻断PR合并,可以在校验命令后追加容错逻辑,让命令始终返回0退出码;如果需要严格拦截不符合Schema的提交,保持命令默认的非0退出码即可,流水线检测到非0退出码会自动中断流程、阻止PR合并。
内容的提问来源于stack exchange,提问作者sandrina-p
相关产品推荐
相关产品推荐

