VS Code YAML 插件报错 "Property _version is not allowed" 的解决办法


最近在 VS Code 里写配置文件时,遇到了一个让人哭笑不得的报错。

我项目里有一个自定义的 YAML 配置文件叫做 problem.yaml,其中定义了一个字段叫 _version。结果刚装上红帽官方的 YAML (Red Hat) 插件,代码就满屏飘红,提示:

Property _version is not allowed.

这就很离谱!_version 是我自己定义的私有属性,凭什么不给用?


为什么会报错?

经过排查,发现这其实是 YAML 插件的“超前消费”行为:

  1. 自动 Schema 匹配:YAML 插件默认开启了在线 JSON Schema Store。
  2. 文件名撞车:插件会根据你的文件名去互联网上的 Schema Store(如 schemastore.org)进行匹配。很不巧,problem.yaml 刚好命中了一个公共的在线 Schema(可能属于某个在线评测系统 Online Judge 或者特定的 API 规范)。
  3. 强行校验:插件自作聪明地用这个公共 Schema 来校验我的私有配置文件,导致那些自定义的字段(比如 _version)被判定为非法属性。

虽然自动校验对 Kubernetes、GitHub Actions 等标准配置文件非常有帮助,但对于同名的私有自定义 YAML 文件来说,这无疑是场灾难。


彻底解决:关闭自动 Schema 校验

如果你的项目里有很多自定义的 YAML 文件,且不想让插件胡乱匹配,可以在项目根目录下的 .vscode/settings.json 中进行如下配置:

1
2
3
4
{
"yaml.schemaStore.enable": false,
"yaml.schemas": {}
}

配置解析:

  • yaml.schemaStore.enable: false:直接关闭从互联网 SchemaStore 自动拉取和匹配 Schema 的功能。这样它就不会再根据文件名瞎猜你的文件格式了。
  • yaml.schemas: {}:清空当前项目级别的 schema 映射关系,确保没有残留的规则干扰。

配置完成后保存,你会发现 problem.yaml 的红线瞬间消失,世界一下子清静了!


进阶:如何只为特定文件配置 Schema?

如果你关闭了全局自动匹配,但依然希望对某些特定的 YAML 文件进行校验(或者想为自己的 problem.yaml 编写专属的校验规则),你可以手动在 settings.json 中进行指定:

1
2
3
4
5
6
7
8
9
10
{
"yaml.schemaStore.enable": false,
"yaml.schemas": {
// 1. 使用本地编写的 Schema 校验特定文件
"./schemas/problem-schema.json": "problem.yaml",

// 2. 或者只针对特定的标准文件启用在线 Schema
"https://json.schemastore.org/github-workflow.json": ".github/workflows/*.yaml"
}
}

这样既能享受 Schema 强类型校验带来的自动补全和纠错便利,又不会让插件越界去管不该管的自定义文件,完美!


版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 opcgrow.com !
  文章评论

请先登录以发表评论

登录 / 注册
  目录