Clash 的 Mixin 功能让我们在不修改原始配置文件情况下,自由定制配置的能力。一般机场下载下来的配置都自带很多的规则,但是有时自己需要针对特定的网站进行优化,就可以用到这个功能。
一开始尝试配置 Mixin 是因为我的 Clash 在规则模式下:
如此种种,虽然下载的配置文件中为我设定了详细的规则。但我总希望我能自己定义一些规则,由于就有了这个文章。
可以直接修改对应机场的配置文件中的 rules
rules: - DOMAIN-SUFFIX,cn.bing.com,DIRECT - DOMAIN-SUFFIX,zhuanlan.zhihu.com,DIRECT - DOMAIN-SUFFIX,zerolacqua.top,DIRECT - DOMAIN-SUFFIX,docs.opencv.org,DIRECT
对我来说 DOMAIN-SUFFIX
就够用了,这样就能完成自定义规则。
但是这么做有一个问题,修改的规则是在配置文件中的,哪天你更新了配置文件(代理的配置文件一般都会经常更新),你的自定义规则就没有了。那如何避免直接在代理的配置文件中进行修改呢?
Mixin 文件能在不配置原配置文件的基础上,通过编写额外的规则覆盖原有的规则。不管你切换到了哪个代理的配置,这个 Mixin 规则都能适用。
yamlmixin:
rules:
- "DOMAIN-SUFFIX,zerolacqua.top,DIRECT"
- "DOMAIN-SUFFIX,zhuanlan.zhihu.com,DIRECT"
这样,当访问 *.zerolacqua.top
或者 *.zhuanlan.zhihu.com
时,就会直接走 DIRECT
流量。
但是这样做还是有问题,那就是 Mixin 中定义的 rules
字段将把原配置文件中 rules
覆盖掉。导致代理配置中定义的那么多规则全部没了。当然,你可以选择把代理配置中的规则复制进 Mixin 中,不过这肯定不是我想要的。
Clash 的 Diff 模式可以让我们既做到增量式地添加规则,不过针对每个配置文件,Diff 都是独立的,如果有多个配置文件,那么你就要定义多次 Diff。
diffrules:
+ - DOMAIN-SUFFIX,cn.bing.com,DIRECT
+ - DOMAIN-SUFFIX,zhuanlan.zhihu.com,DIRECT
- DOMAIN-SUFFIX,bilibili.com,🌏 爱奇艺&哔哩哔哩
比如你在 Diff 中添加了如上的两行,那么每次更新配置后,你所做的修改都会应用在这个配置文件上。
Diff 似乎已经帮助我们解决了问题,但有一点遗憾的地方是,每个代理配置文件都需要单独进行配置。有没有更好的办法,让我“一处配置、处处生效”?
Mixin 除了 yml 格式,还有 js 格式的(需要在设置中打开)。在 js 格式中,Clash 给出了默认的配置:
jsmodule.exports.parse = ({ content, name, url }, { yaml, axios, notify }) => {
return content
}
修改:
jsmodule.exports.parse = ({ content, name, url }, { yaml, axios, notify }) => {
const extra = {
rules: [
'DOMAIN-SUFFIX,cn.bing.com,DIRECT',
'DOMAIN-SUFFIX,zhuanlan.zhihu.com,DIRECT',
...content.rules,
],
}
return { ...content, ...extra }
}
这里 content
是配置文件的结构化数据,将 rule
属性进行修改,添加上需要的内容即可。
本文作者:Zerol Acqua
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!