VS Code ^1.68.0版本扩展JSON校验报meta-schema特性不支持警告如何解决
VS Code扩展JSON校验$dynamicRef不支持警告解决方案
问题描述
开发基于VS Code内置JSON校验器实现JSON文件校验功能的扩展时,校验依赖的OpenAPI 3.1.x schema使用了$dynamicRef这类meta-schema特性,因引用OpenAPI schema的硬性需求,必须保留该特性。
当使用如下自定义schema配置时,校验器会抛出meta-schema特性暂不支持的警告,校验功能完全失效:
{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "OpenApiPathObject", "type": "object", "additionalProperties": { "$dynamicRef": "https://raw.githubusercontent.com/OAI/OpenAPI-Specification/main/schemas/v3.1/schema.json#/$defs/path-item-or-reference" } }
触发的警告内容为:
The schema uses meta-schema features ($dynamicRef) that are not yet supported by the validator.
替换为普通$ref后,schema大部分功能可正常运行,但涉及$dynamicRef的属性无法完成校验,无法满足OpenAPI 3.1.x的校验要求。
当前开发环境为VS Code 1.69.0,扩展package.json中已将引擎要求设置为^1.68.0,根据v1.68版本2022年5月发布的官方更新日志,该版本声明支持Draft 2020-12版本schema,需要找到可行方案解决该警告问题。
扩展package.json相关配置片段如下:
... "engines": { "vscode": "^1.68.0" }, ...
可行解决方法
- 提升扩展的VS Code最低引擎版本要求:VS Code 1.68版本仅完成了Draft 2020-12基础特性的适配,
$dynamicRef、$dynamicAnchor这类高阶meta-schema特性直到1.76版本才在内置JSON校验器中全量落地。将package.json中engines字段的vscode版本要求调整为^1.76.0,即可直接消除该警告,$dynamicRef相关的校验逻辑也能正常运行。 - 构建阶段预编译schema做向下兼容:如果需要兼容1.76以下版本的VS Code,可以在扩展构建流程中引入schema编译工具,将带
$dynamicRef的OpenAPI 3.1.x schema预解析为全静态$ref结构的兼容版本,运行时直接加载编译后的schema,不会触发校验器的特性不支持提示,也不需要用户升级VS Code版本。 - 显式声明schema版本避免解析回退:在扩展的
jsonValidation贡献点配置中,显式指定关联schema使用的规范版本为Draft 2020-12,避免校验器因schema识别逻辑问题,回退到不支持$dynamicRef的旧版draft解析链路。
内容的提问来源于stack exchange,提问作者prohit
相关产品推荐
相关产品推荐

