##看报错停在哪一层

Stash 的报错可以粗分成两层:YAML 语法层和资源加载层。语法层没过时,后面的 rule-set、provider、策略组命中都不用急着查。

报错片段更可能卡点做什么
unknown anchor引用了不存在的锚点找到对应 *name,改成完整字段
unknown aliasalias 写法或作用域不被接受删除 *name,把列表展开
unknown tag配置里有自定义 YAML 标签删除标签,保留标签后的真实值
cannot unmarshal字段类型不符合预期对照 Stash / Mihomo 配置文档改类型
rule-set failed外部规则资源失败YAML 通过后再单独测 URL

anchors 到底要怎么展开?

anchors 的本质是“先定义模板,再在别处引用”。桌面端配置里常见写法是把公共节点参数、分组参数或 provider 参数放进 &default,后面再用 *default 复用。

排错时先牺牲文件长度,换取可读性:每个 group 都明确写 typeproxiesuse,每个 provider 都写完整字段。等 Stash 能保存配置,再考虑要不要保留少量简单复用。

哪 3 个符号优先删?

优先删这 3 类符号:&*<<:

& 是定义锚点,* 是引用锚点,<<: 是合并键。只要其中一处名字拼错、缩进变了,或者解析器不接受合并方式,整份 YAML 就会在进入规则阶段前失败。

从桌面 Clash 迁到 Stash,哪些字段先别带?

先只保留 3 块:proxiesproxy-groupsrules。这 3 块能跑起来,说明基础结构没问题。

scriptprofile、部分 experimental 字段、复杂 provider 和外部 rule-set 最容易把问题混在一起。迁移第一轮把它们注释掉,第二轮再按一块一个变量加回。

如果同一份配置要给多个客户端共用,最麻烦的不是节点数量,而是不同客户端对 YAML 扩展写法的容忍度不同。多端共用时,用多格式测试订阅源承载基础配置,通常比手写 anchors 再逐端修补更省事。

rule-set 报错要和 anchors 一起修吗?

不要一起修。YAML parser 报错时,rule-set 还没有真正进入下载、解析、命中阶段;这时看到的资源报错很可能只是连带噪音。

做一个最小配置:1 个 DIRECT 分组、1 个节点分组、2 条规则。最小配置能在 Stash 保存并显示策略组后,再把 rule-set 一个一个加回。

Stash 配置解析失败:怎么判断已经修好

看 4 个信号就够了。

  1. Stash 能保存配置,不再弹 YAML parser 错误。
  2. 策略组里能看到节点或 provider 展开的节点。
  3. 日志里不再出现 anchoraliasunknown tag
  4. 刷新规则资源后,剩下的错误只和 URL、404、超时或资源格式有关。

如果第 1 步还没通过,继续删 YAML 扩展写法;如果第 1 步通过但第 4 步失败,再去查 rule-set 地址和资源格式。

相关阅读