Clash Verge Rev 扩展脚本实战 JavaScript 预处理与 Merge 规则动态注入指南
很多从旧版 Clash for Windows 迁移到 Clash Verge Rev 的用户,最常遇到的困扰就是如何保留自己的个性化配置。每当机场节点发生变动、用户在客户端点击更新订阅时,远程下发的新文件就会无情冲掉本地手工添加的自定义分流规则、特别策略组以及特定端口设置。如果每次更新后都要重新手工复制粘贴一遍代码,维护成本极其高昂。
Clash Verge Rev 提供了极为强大的扩展配置体系。通过 Merge(合并)与 Script(脚本)两大特性,用户可以在外部订阅落地后、内核正式加载前,挂载一层无损的动态拦截器。无论上游机场如何高频更新,你预设的策略组与规则链条都会像乐高积木一样自动拼接在正确位置。
Merge 合并与 Script 脚本的选型边界
在 Verge Rev 中,扩展功能分为基于 YAML 结构的 Merge 合并模式,以及基于完整 JavaScript 运行时的 Script 脚本模式。
Verge Rev 动态配置处理管道[远程机场原始订阅] │ ▼┌────────────────────────────────────────────────────────┐│ 1. 订阅拉取与本地缓存 (Raw Profile) │└───────────────────────┬────────────────────────────────┘ │ ▼┌────────────────────────────────────────────────────────┐│ 2. 执行预处理扩展 (Merge 合并覆写 / Script JS 逻辑编程) ││ - 动态插入 ChatGPT 专属策略组 ││ - 顶部强制置顶本地内网直连规则 ││ - 正则筛选或剔除不可靠垃圾节点 │└───────────────────────┬────────────────────────────────┘ │ ▼┌────────────────────────────────────────────────────────┐│ 3. 产出最终运行配置 (Runtime Config) 供内核消费启动 │└────────────────────────────────────────────────────────┘如果仅仅需要向配置中简单追加几个静态字段,例如调整本地监听端口 mixed-port: 7890,或者开启 DNS 的 Fake-IP 模式,使用语法直观的 Merge 模式即可轻松搞定。
如果需要遍历节点列表、根据特定地区关键字批量筛选节点、将不同机场的节点按倍率动态分派至不同的新建策略组,或者需要执行条件判断与数组切片,功能完备的 JavaScript Script 模式则是不可替代的最佳选择。
基于 JavaScript 的 Script 扩展实战范式
Verge Rev 内置了一个轻量安全的 JavaScript 虚拟机。用户编写的每一个脚本文件,都必须导出一个接收 config 参数并返回修改后 config 的 main 入口函数。
在客户端界面左侧导航栏点击订阅管理,右键点击目标订阅卡片,选择编辑扩展配置,随后在代码编辑区录入脚本。
生产级自定义策略组注入脚本
以下展示一段经受过实战检验的完整 JavaScript 扩展脚本。它的功能是在任何机场配置中无缝插入 AI 业务策略组,并将符合特定名称的节点自动归类。
// Verge Rev 生产级扩展脚本蓝本function main(config) { // 1. 提取原始订阅中的所有代理节点名称 const proxies = config.proxies || []; const proxyNames = proxies.map(p => p.name);
// 2. 筛选出优质低延迟区域节点作为 AI 备选 const aiCandidateNames = proxyNames.filter(name => { return /美国|US|United States|日本|JP|Japan|新加坡|SG|Singapore/i.test(name); });
// 如果没有匹配到合适节点,则回退至所有节点兜底 const targetAiNodes = aiCandidateNames.length > 0 ? aiCandidateNames : proxyNames;
// 3. 构建专属 AI 服务策略组 const aiGroup = { name: "🤖 AI 国际服务", type: "select", proxies: ["⚡ 自动优选", "🎯 全球直连", ...targetAiNodes] };
// 4. 构建前置高容差自动选优策略组 const autoGroup = { name: "⚡ 自动优选", type: "url-test", url: "http://cp.cloudflare.com/generate_204", interval: 300, tolerance: 50, lazy: true, proxies: targetAiNodes };
// 5. 将新策略组注入现有 proxy-groups 列表顶部 config['proxy-groups'] = [aiGroup, autoGroup, ...(config['proxy-groups'] || [])];
// 6. 顶部优先插入精准分流规则 const priorityRules = [ "DOMAIN-SUFFIX,openai.com,🤖 AI 国际服务", "DOMAIN-SUFFIX,chatgpt.com,🤖 AI 国际服务", "DOMAIN-SUFFIX,anthropic.com,🤖 AI 国际服务", "DOMAIN-SUFFIX,claude.ai,🤖 AI 国际服务", "IP-CIDR,192.168.0.0/16,DIRECT,no-resolve" ];
config.rules = [...priorityRules, ...(config.rules || [])];
// 返回修改后的完整配置对象 return config;}脚本核心执行逻辑透析
在该脚本中,config.proxies 首先被解析为纯内存数组。通过 Javascript 标准的 filter 配合正则表达式,瞬间提取出名称中包含美国、日本与新加坡的节点标签。
构建完成的 🤖 AI 国际服务 与 ⚡ 自动优选 被解构并插入在 proxy-groups 数组的最前端,确保用户打开客户端时第一时间在界面顶部看到这些分组。
在分流规则维度,将 OpenAI 与 Claude 的域名路由通过解构赋值无缝置于 rules 列表最上方。这完美利用了 Clash 自顶向下的短路匹配机制,杜绝了下游默认规则的误判干扰。
Merge 模式轻量级配置覆写实战
如果不想编写 JavaScript 代码,仅希望覆盖或增补部分基础键值,可以在扩展配置中选择 Merge 格式。
# Merge 覆写示范prepend-rules: - DOMAIN-SUFFIX,github.com,🚀 节点选择 - DOMAIN-KEYWORD,google,🚀 节点选择 - IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
mixed-port: 7890allow-lan: truelog-level: info
tun: enable: true stack: mixed dns-hijack: - any:53在 Merge 语法中,prepend-rules 关键字允许用户向原有的规则列表顶端前置添加规则,而不会抹掉订阅自带的其他数百条常规规则;mixed-port 与 allow-lan 则能强行锁定本地端口与局域网共享行为。
运行期配置预览与语法排障指南
脚本编写完成后,如何验证它是否真正生效并正确输出了预期的 YAML 结构。
技巧一 善用 Diff 差异比对窗口
在 Verge Rev 订阅卡片下方,点击右侧的三个点菜单,选择查看运行时配置(View Runtime Config)。
客户端会并排弹出一个高亮代码视窗。左侧展示从机场服务器直接下载的纯原始文件,右侧展示经过扩展脚本处理加工后的实际交付运行文件。通过直观的色块差异,能够一眼看出自定义策略组是否成功插入、首行规则是否准确置顶。
技巧二 捕获 JavaScript 运行时异常
如果脚本中存在语法错误(例如变量未声明、拼写失误或试图读取 undefined 属性),Verge Rev 在点击保存或刷新订阅时会弹出明确的红色气泡提示。
脚本排查日志范例TypeError: Cannot read properties of undefined (reading 'map')遇到此类提示时,检查原始订阅中是否存在 proxies 字段。某些机场在节点维护期间可能下发空文件,因此在脚本中养成使用可选链(?.)或空数组兜底(config.proxies || [])的防守型编程习惯至关重要。
多脚本链式调用编排逻辑
对于复杂的高级玩家,Verge Rev 还支持同时挂载多个独立的扩展脚本。系统会按照勾选顺序从上到下像流水线一样依次执行。
通常的编排规范是把清洗剔除垃圾节点的脚本放在首位,把重命名与打标签的脚本放在第二位,最后挂载注入策略组与高级分流规则的业务脚本。清晰的单一职责划分能让未来的脚本维护变得极度从容。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!














