最近在 VS Code 里写配置文件时,遇到了一个让人哭笑不得的报错。
我项目里有一个自定义的 YAML 配置文件叫做 problem.yaml,其中定义了一个字段叫 _version。结果刚装上红帽官方的 YAML (Red Hat) 插件,代码就满屏飘红,提示:
Property _version is not allowed.
这就很离谱!_version 是我自己定义的私有属性,凭什么不给用?
为什么会报错?
经过排查,发现这其实是 YAML 插件的“超前消费”行为:
- 自动 Schema 匹配:YAML 插件默认开启了在线 JSON Schema Store。
- 文件名撞车:插件会根据你的文件名去互联网上的 Schema Store(如 schemastore.org)进行匹配。很不巧,
problem.yaml刚好命中了一个公共的在线 Schema(可能属于某个在线评测系统 Online Judge 或者特定的 API 规范)。 - 强行校验:插件自作聪明地用这个公共 Schema 来校验我的私有配置文件,导致那些自定义的字段(比如
_version)被判定为非法属性。
虽然自动校验对 Kubernetes、GitHub Actions 等标准配置文件非常有帮助,但对于同名的私有自定义 YAML 文件来说,这无疑是场灾难。
彻底解决:关闭自动 Schema 校验
如果你的项目里有很多自定义的 YAML 文件,且不想让插件胡乱匹配,可以在项目根目录下的 .vscode/settings.json 中进行如下配置:
1 | { |
配置解析:
yaml.schemaStore.enable: false:直接关闭从互联网 SchemaStore 自动拉取和匹配 Schema 的功能。这样它就不会再根据文件名瞎猜你的文件格式了。yaml.schemas: {}:清空当前项目级别的 schema 映射关系,确保没有残留的规则干扰。
配置完成后保存,你会发现 problem.yaml 的红线瞬间消失,世界一下子清静了!
进阶:如何只为特定文件配置 Schema?
如果你关闭了全局自动匹配,但依然希望对某些特定的 YAML 文件进行校验(或者想为自己的 problem.yaml 编写专属的校验规则),你可以手动在 settings.json 中进行指定:
1 | { |
这样既能享受 Schema 强类型校验带来的自动补全和纠错便利,又不会让插件越界去管不该管的自定义文件,完美!