规则分流

Clash Verge 扩展脚本怎么用:追加列表的唯一代码路径、最小试验与不生效排查

扩展脚本(v1.6.x 叫「Script 配置」,v1.7.x 起改名「扩展脚本」)适合做扩展配置表达不了的动态逻辑。日常几条直连/代理例外,用订阅右键菜单的「编辑规则」「编辑代理组」更省事(Merge 自定义规则)。脚本能力更大,翻车面也更大——尤其是网上复制来的「大而全脚本」。

脚本是追加列表的唯一代码路径

扩展配置只做键值覆写,往里写 rules、proxy-groups 会把订阅的整份列表替换掉,prepend-rules 这类键自 v1.7.x 起也不再被解析。要用代码往列表里追加,就得走脚本:

const myRules = [
  'DOMAIN-SUFFIX,example.com,DIRECT',
];

function main(config, profileName) {
  config.rules = [...myRules, ...config.rules];
  return config;
}

代理组同理,把新组并进 config['proxy-groups'] 再 return。执行顺序是全局扩展配置 → 全局扩展脚本 → 订阅扩展配置 → 订阅扩展脚本,写在后面的能改掉前面的结果。规则只有静态几条时,可视化编辑器的 prepend 区效果一样,还不用担心语法错误让整份配置加载失败。

启用前:只用你读得懂或信任来源的代码;先备份配置(备份);出问题知道怎么一键关掉脚本。

最小试验流程

  1. 新建或启用脚本,只加一小段可观察的改动(例如给某个测试域名打标)。
  2. 重载,用连接页/日志确认生效。
  3. 再逐步加逻辑。别一上来贴几百行。

全局脚本默认模板能跑就别瞎改关键路径。调试期可以开详细日志,确认稳定后关掉 debug,少刷盘少占 CPU(占用问题见内存 CPU)。

不生效或越改越乱

开关没开、语法错误、与扩展配置同时改同一字段导致后写覆盖——按这个顺序查。脚本里直接赋值 config['proxy-groups'] 而不是拼接,会把订阅的组全冲掉,界面表现是代理组空白,见代理组空白。入口是右键订阅卡片的「编辑脚本」,v1.6.x 里叫 Script 配置。

追加和覆盖只差一个展开符,结果完全不同。正确写法是追加,订阅规则仍保留:

config.rules = [...myRules, ...config.rules];

错误写法是直接覆盖,订阅那几千条规则会被这几条顶掉:

config.rules = myRules;

脚本里再请求外网去「自动改规则」,失败时很难复盘,也有安全风险。Steam/流媒体这种固定例外更适合放进「编辑规则」的 prepend 区,而不是脚本里写死。

性能与团队

热路径上跑重逻辑会拖延迟、抬 CPU。团队场景约定:谁改脚本、如何评审、如何回滚;不要每人私藏一份互不兼容的脚本。

止损与验收

异常时:关脚本 → 重载 → 确认恢复 → 再逐段加回。验收:目标行为出现;无关站点未被误伤;关脚本后能回到干净基线。客户端用来源可核验的包(下载中心)。