· BigDog · AI 工程实验 · 10 min read
Clash Verge Script 规则管理指南
使用 Script 统一管理 Clash Verge 规则新增和维护。
目录
这篇记录的是 Clash Verge 规则脚本的维护方式。目标不是堆更多规则,而是把规则来源、插入位置和验证方法固定下来,避免以后代理配置越改越乱。
这篇笔记怎么读
- 先看规则来源:硬编码、本地文件、远程文件分别适合不同维护频率。
- 再看规则插入位置:Clash 采用首条匹配,顺序比规则数量更重要。
- 最后看验证方式:改完脚本后要观察命中情况,不要只看配置能否保存。
脚本支持三种规则来源:
- 硬编码:直接在脚本中写入固定规则。
- 本地文件:从你电脑上的
.txt或.yaml文件加载规则。 - 远程文件:从网络 URL(例如社区维护的规则集)加载规则,并自动格式化为 Clash 所需格式。
所有操作均通过 Script 配置 完成,兼容 Clash Verge 最新版本(v1.7.2+)。
1. 原理说明
Clash Verge 的 Script 配置 是一个 JavaScript 函数,它在主配置加载后、最终生效前被执行。你可以通过修改 config.rules 数组来插入、删除或重排规则。
由于 Clash 采用 首条匹配 原则,新增规则通常应插入到现有规则列表的 最前面(使用 unshift)以获得最高优先级。
2. 完整脚本
将以下脚本完整复制到你的 Script 配置中,根据需要修改开头的配置部分。
// ==================== 配置区域(请按需修改) ====================
// 1. 硬编码规则列表
const hardcodedRules = [
"DOMAIN-SUFFIX,overleaf.com,DIRECT",
"DOMAIN-SUFFIX,baidu.com,DIRECT",
"DOMAIN-KEYWORD,google,PROXY"
];
// 2. 本地文件路径(绝对路径或相对于 Clash Verge 工作目录的路径)
// 例如:C:/Users/你的用户名/my-rules.txt 或 ./my-rules.txt
const localFilePath = ""; // 留空表示不使用本地文件
// 3. 远程规则集 URL(支持每行一个域名或完整 Clash 规则)
// 参考项目:https://github.com/Loyalsoldier/clash-rules
const remoteUrl = "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt";
// ==============================================================
// 同步 HTTP GET 函数(用于加载远程文件)
function httpGet(url) {
let req = new XMLHttpRequest();
req.open("GET", url, false);
req.send(null);
if (req.status === 200) return req.responseText;
return null;
}
// 读取本地文件(注意:QuickJS 环境不支持 Node.js fs 模块,此函数仅为示例,实际不可用)
// 说明:Clash Verge Script 环境无法直接读取任意本地文件,但可以通过 Merge 配置的 !file 指令替代。
// 如果你确实需要本地文件,请改用 Merge 配置(参考第 4 节)。
function readLocalFile(path) {
// 由于环境限制,这里不实现真正的文件读取。
// 建议将本地规则直接写在 hardcodedRules 中,或改用 Merge 配置。
console.log("本地文件读取在当前 Script 环境中不可用,请使用 hardcodedRules 或 Merge 配置。");
return null;
}
// 将远程响应文本转换为 Clash 规则数组
function parseRemoteRules(text, sourceType) {
const lines = text.split(/\r?\n/);
const rules = [];
for (let line of lines) {
line = line.trim();
if (line === "" || line.startsWith("#")) continue;
if (sourceType === "domain-list") {
// 如果远程文件只包含域名(如 Loyalsoldier 的 direct.txt 实际已是完整规则)
// 这里不做额外处理,因为 Loyalsoldier 文件本身就是 "DOMAIN-SUFFIX,domain,DIRECT" 格式
rules.push(line);
} else {
// 默认直接添加
rules.push(line);
}
}
return rules;
}
function main(config, profileName) {
const newRules = [];
// 1. 添加硬编码规则
newRules.push(...hardcodedRules);
// 2. 添加远程规则(如果提供了 URL)
if (remoteUrl) {
const remoteData = httpGet(remoteUrl);
if (remoteData) {
const remoteRules = parseRemoteRules(remoteData, "domain-list");
newRules.push(...remoteRules);
console.log(`已加载远程规则 ${remoteRules.length} 条`);
} else {
console.log(`远程规则加载失败: ${remoteUrl}`);
}
}
// 3. 将新规则插入到已有规则的最前面
if (newRules.length > 0) {
config.rules.unshift(...newRules);
}
return config;
}3. 使用步骤
3.1 创建 Script 配置
- 打开 Clash Verge,进入 Profiles(配置)页面。
- 点击 New → Script,命名为
规则补充(或任意名称)。 - 将上面的完整脚本粘贴到编辑器中。
3.2 按需修改配置区域
场景 A:仅使用硬编码规则
const hardcodedRules = [
"DOMAIN-SUFFIX,overleaf.com,DIRECT",
"DOMAIN-SUFFIX,github.com,PROXY"
];
const localFilePath = "";
const remoteUrl = "";场景 B:使用 Loyoldsoldier 远程直连规则
保持 remoteUrl 为默认值:
const remoteUrl = "https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt";你也可以使用其他分类:
| 规则类型 | URL |
|---|---|
| 直连(国内域名) | https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt |
| 代理(GFW列表) | https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt |
| 广告拦截 | https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/reject.txt |
场景 C:同时使用多个远程规则集
修改 remoteUrl 为你的自定义 URL,或者将脚本扩展为循环加载多个 URL(参考进阶部分)。
3.3 启用 Script 配置
- 保存脚本后,右键点击该 Script 配置 → Enable(启用)。
- 然后在 Profiles 页面点击你的主配置文件,Clash Verge 会自动重新加载并生效。
4. 关于本地文件的替代方案
由于 Clash Verge 的 Script 环境(QuickJS)不支持直接读取本地文件,如果你确实需要从本地文件加载规则,请使用 Merge 配置 + !file 指令。
4.1 创建本地规则文件
新建一个文本文件,例如 my-rules.txt,每行一条 Clash 规则:
DOMAIN-SUFFIX,local.dev,DIRECT
DOMAIN-SUFFIX,company.com,PROXY4.2 创建 Merge 配置
- 新建 Merge 配置:New → Merge。
- 写入以下内容:
prepend-rules: !file ./my-rules.txt注意:新版 Clash Verge (v1.7.2+) 已移除
prepend-rules语法,请改用可视化规则编辑器导入本地文件,或降级到旧版本。
推荐做法:将本地规则直接写在 Script 配置的 hardcodedRules 数组中,这是最简单可靠的方式。
5. 验证规则是否生效
- 打开 Clash Verge 的 Logs(日志)页面。
- 访问一个你添加了规则的网站(如
overleaf.com)。 - 查看日志中匹配到的规则,应显示
DIRECT(或其他你指定的策略)。
6. 进阶:加载多个远程规则集
若需同时加载 Loyalsoldier 的直连、代理等多个规则集,可修改脚本如下:
const remoteUrls = [
"https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/direct.txt",
"https://cdn.jsdelivr.net/gh/Loyalsoldier/clash-rules@release/proxy.txt"
];
function main(config) {
const newRules = [];
for (const url of remoteUrls) {
const data = httpGet(url);
if (data) {
const rules = data.split('\n')
.map(l => l.trim())
.filter(l => l && !l.startsWith('#'));
newRules.push(...rules);
}
}
// 去重(可选,保留先出现的)
const uniqueRules = [...new Map(newRules.map(r => [r, r])).values()];
config.rules.unshift(...uniqueRules);
return config;
}7. 常见问题
Q: 添加的规则不生效?
- 检查规则顺序:使用
unshift插入到最前面是正确的,但如果主配置中已经有更早匹配的规则(例如DOMAIN-SUFFIX,com,PROXY),则会优先匹配。确保你的规则足够具体。 - 查看日志:在 Logs 中观察匹配详情。
Q: 远程规则加载失败?
- 确认 URL 可以直接在浏览器中访问。
- 如果使用
raw.githubusercontent.com,请替换为cdn.jsdelivr.net镜像。 - 检查网络连接,可能需要临时关闭代理。
Q: 能否与 Rule Providers 同时使用?
可以。Script 配置会在 Rule Providers 加载后执行,所以你的 unshift 规则仍然会在最前面,优先级最高。
8. 总结
| 需求 | 推荐方案 |
|---|---|
| 添加少量固定规则 | 硬编码到 Script 的 hardcodedRules |
| 使用社区维护的规则集(如 Loyolsoldier) | Script 中配置 remoteUrl |
| 从本地文件加载规则 | 将内容复制到 hardcodedRules,或改用 Merge(旧版) |
| 同时使用多个远程规则集 | 扩展脚本循环加载 |
通过上述脚本,你可以在不修改原始订阅配置的前提下,灵活地扩展任何规则。
Clash Verge Script 规则管理指南
Clash Verge版本:v2.4.2
// ==================== 配置区域(请按需修改) ====================
// 1. 硬编码规则列表
const hardcodedRules = [
"DOMAIN-SUFFIX,overleaf.com,DIRECT",
"DOMAIN-SUFFIX,deepseek.com,DIRECT",
"DOMAIN-SUFFIX,kimi.com,DIRECT",
"DOMAIN-SUFFIX,overleafusercontent.com,DIRECT"
];
function main(config, profileName) {
const newRules = [];
// 1. 添加硬编码规则
newRules.push(...hardcodedRules);
// 3. 将新规则插入到已有规则的最前面
if (newRules.length > 0) {
config.rules.unshift(...newRules);
}
return config;
}```