报「配置最外层不对」——多半是你只粘了一段
校验器提示「配置最外层应该是 proxies / proxy-groups / rules 这样的键,而不是数组或纯文本」,通常不是配置坏了,而是你粘进来的只是整份配置里的一小段。本文说明 Clash 配置的顶层结构长什么样,以及三种典型的粘错情况。
本文目录(6 节 · 约 1 分钟) +
- 01 报错长什么样
- 02 完整配置的顶层是什么形状
- 03 三种典型的粘错
- 04 一个容易混淆的情况:片段本身是对的
- 05 为什么校验器不「猜」
- 06 相关
一句话结论:一份完整的 Clash 配置,最外层是一组键(proxies:、proxy-groups:、rules: 等)。如果你粘进来的最外层是一个列表或一段纯文本,那多半只是整份配置里的一小段。
这条报错几乎总是「粘少了」,而不是「写错了」。
报错长什么样
Clash 配置最外层应该是
proxies:/proxy-groups:/rules:这样的键,而不是数组或纯文本。
完整配置的顶层是什么形状
顶层是一个映射(键值对的集合),每个键各管一块:
port: 7890
socks-port: 7891
allow-lan: false
mode: rule
log-level: info
proxies:
- name: "香港 01"
type: vmess
server: example.com
port: 443
proxy-groups:
- name: "PROXY"
type: select
proxies: ["香港 01", DIRECT]
rules:
- MATCH,PROXY
关键在于最左边一列没有缩进的那些名字:port、proxies、rules……它们都顶格写,后面跟冒号。这就是「顶层键」。
三种典型的粘错
只粘了 proxies 底下的节点列表。 这是最常见的一种,粘进来长这样:
- name: "香港 01"
type: vmess
server: example.com
最外层是一个以 - 开头的列表,不是键值对,所以校验器认不出这是 Clash 配置。改法:在最前面补一行顶格的 proxies:,并把每一项的缩进对齐好。
粘了一堆节点分享链接。 那不是 YAML,是节点链接,最外层自然是纯文本。这种情况应该用节点链接解析器,它专门处理 vmess://、vless://、ss:// 这类链接。
粘了订阅地址返回的那一大串 Base64。 同样不是 YAML。那应该进订阅内容解码器。
如果你自己也不确定手上这串东西属于哪一类,可以先看三类输入怎么分辨。
一个容易混淆的情况:片段本身是对的
有时候你手上的确只有一段,比如从教程里复制的 rules 片段,而你只想检查这一段写得对不对。这种情况下报错是预期内的——校验器要的是完整配置,因为很多检查(比如策略组引用的节点存不存在)必须看到全文才能做。
想只校验片段,把它补成一份最小的完整配置即可:
proxies: []
proxy-groups: []
rules:
- DOMAIN-SUFFIX,example.com,DIRECT
- MATCH,DIRECT
空数组是合法的,这样片段就能单独跑检查了。
为什么校验器不「猜」
它可以猜——看到列表就自动包一层 proxies:。但那样做有个问题:如果你粘的其实是 proxy-groups 的片段,猜错就会给出一串莫名其妙的后续报错,比你自己补一行麻烦得多。
拿不准的输入明确说「这不像配置」,比替你猜一个答案更有用。这也是本站工具的一贯口径:不确定的字段标为「未识别」,而不是填一个看起来合理的值。
相关
相关文章
Clash 报错「proxies 必须是数组」是什么意思,怎么改
Clash 或 mihomo 提示 proxies 不是数组、无法解析节点列表时,问题几乎都出在 YAML 的短横线和缩进上。本文说明这个报错的确切含义、四种常见成因,以及每种情况的正确写法。
YAML 缩进明明对齐了却报错?多半是 Tab 混进来了
Clash 配置提示缩进不一致、mapping items 未对齐,但肉眼看每一行都对得整整齐齐——这种情况几乎都是 Tab 和空格混用。本文说明 YAML 为什么禁止 Tab 缩进、怎么在编辑器里揪出它,以及另外两种视觉上看不出的缩进问题。
port 写成 "443" 带引号有问题吗?为什么校验器要提醒
端口在 YAML 里写成 port:443 是数字,写成带引号的 "443" 就成了字符串。多数客户端能容忍这个差别,但部分版本会解析失败,报出与端口毫无关系的错误。本文说明两者的区别、什么时候真的会坏,以及端口越界时的报错含义。