1. 机制对比:YAML 字符串替换 vs 原生 JavaScript AST
在旧版 CFW 中,parsers 依赖定制的 yaml 语法和简单的 commands 指令,调试极其痛苦,缩进错一个空格就直接全盘报错。
**Clash Verge Rev 的 Script 机制彻底现代化**:
- 接收反序列化后的完整 JavaScript 对象 `config`;
- 可以使用标准的 `config.rules.unshift(...)`、`config.proxies.filter(...)` 等现代 JS API 数组操作;
- 支持 `console.log` 实时打印调试信息,开发体验极度舒适。
💡 Verge 的 Script 扩展完全解耦于远程订阅,每次点击更新订阅时,脚本自动在内存中重新执行一次覆写。
2. 经典 Parsers 代码向 Verge Script 移植对照实录
以下展示如何将 CFW 中常用的「在规则最开头追加自定义规则」与「正则过滤有效节点」平移至 Verge:
javascript
# Clash Verge Rev 标准 Script 扩展脚本范例
function main(config, profileName) {
// 1. 在 rules 列表最顶部插入自定义的直连与代理规则
const customRules = [
"DOMAIN-SUFFIX,my-custom-direct.com,DIRECT",
"DOMAIN-KEYWORD,special-site,PROXY",
"IP-CIDR,192.168.1.0/24,DIRECT,no-resolve"
];
config.rules = [...customRules, ...(config.rules || [])];
// 2. 动态向特定策略组追加备用节点
const proxyGroup = config['proxy-groups']?.find(g => g.name === 'PROXY');
if (proxyGroup) {
proxyGroup.proxies.unshift('DIRECT');
}
// 3. 返回修改后的完整配置对象
return config;
} 3. 在 Clash Verge Rev 中挂载扩展的操作步骤
1. 打开 Clash Verge Rev,在左侧导航栏点击 **「订阅(Profiles)」**;
2. 找到右侧或底部的 **「扩展配置(Merge / Script)」**;
3. 点击「新建扩展」,选择类型为 **「Script」**;
4. 将上述 JavaScript 代码粘贴进内置代码编辑器,点击保存;
5. 右键该扩展,点击 **「启用」**,随后刷新订阅卡片,自定义修改立即生效!
❓ 常见疑问与排查步骤
CFW 里的 prepend-rules 在 Verge 对应什么?
在 Merge 模式下对应直接声明 `rules:`,Verge 默认会自动将 Merge 中的规则置于订阅规则的前面;在 Script 模式下使用 `config.rules.unshift()`。
脚本写错了会导致软件闪退吗?
不会闪退。Verge 在沙箱中执行脚本,若有 JS 语法错误,会在界面弹出友好的错误提示,并自动回退到未修改的原始配置。
多个扩展脚本可以同时生效吗?
可以。Verge 支持流水线式执行多个扩展脚本,自上而下依次传递配置对象进行链式修改。