这次折腾 Clash Verge 的配置脚本通过坚果云同步,本质上不是脚本本身有多复杂,而是我对坚果云“同步目录”的理解有偏差。
我一开始的想法很直接:既然坚果云在文件资源管理器侧边栏里有一个入口,那我就在那个入口下面新建一个目录,把 Clash Verge 用到的 Script.js 放进去。这样看起来文件就在坚果云里面了,再把 Clash Verge 的 profiles 目录里的脚本软连接过去,多台电脑之间应该就能保持一致。
实际操作下来发现不是这样。
误解在哪里
我之前把文件资源管理器侧边栏里的“坚果云”当成了一个普通的本地同步文件夹。这个理解是不准确的。
侧边栏里的“坚果云”更像是坚果云同步文件夹的总入口,里面展示的是已经被坚果云客户端管理的同步文件夹。它不是一个随便放目录进去就自动变成同步目录的地方。
所以当我直接在这个总入口下面新增目录失败以后,又换了一个办法:打开坚果云网页版,新建了一个目录,然后把 Script.js 放到这个目录里,再让 Clash Verge 的 profiles\Script.js 软连接到它。
这个方案看起来绕过了本地不能新增的问题,但实际上还是没有解决核心问题:本地这个目录并不是一个通过客户端正确登记的普通同步目录。结果坚果云客户端就报了一个警告:
不在任何同步文件夹中

一开始看到这个提示会觉得很奇怪,因为路径里明明有 Nutstore,看起来也确实在坚果云下面。但坚果云判断的不是“路径名字里有没有 Nutstore”,而是这个目录有没有被客户端作为一个本地同步文件夹登记和管理。
正确的模型
这次之后我重新理了一下,根据坚果云官方的解释:

,比较合理的模型应该是这样:
普通本地目录
↓
被坚果云客户端设置为同步目录
↓
目录里的 Script.js 在多台电脑间同步
↓
Clash Verge profiles\Script.js 软连接到这份 Script.js
也就是说,真正应该同步的是一个普通磁盘目录,比如:
D:\坚果云同步目录\clash-verge\Script.js
然后在坚果云客户端里,把 D:\坚果云同步目录\clash-verge 设置为同步目录。Clash Verge 那边不要直接把脚本放在自己的 profiles 目录里,而是让 profiles 里的 Script.js 作为软连接,指向这个同步目录里的脚本文件。
这样做之后,Clash Verge 使用的是同一份脚本,坚果云同步的也是这份脚本。两边的职责比较清楚:
坚果云负责同步普通本地目录
Clash Verge 负责读取 profiles 里的 Script.js
软连接负责把两者接起来
多台电脑要分别设置软连接
还有一个容易误会的点:坚果云会同步文件内容,但不会替每台电脑自动配置 Clash Verge 的本地软连接。
也就是说,在第一台电脑上设置了:
profiles\Script.js -> D:\坚果云同步目录\clash-verge\Script.js
这只影响第一台电脑。第二台电脑上,坚果云可以把 Script.js 同步下来,但 Clash Verge 的 profiles 目录是否指向这份文件,仍然要在第二台电脑本地单独设置一次。
所以每台电脑都要做两件事:
- 准备一个普通本地目录,并让坚果云同步它。
- 把 Clash Verge 的
profiles\Script.js软连接到这个同步目录里的Script.js。
这样之后,脚本内容的修改会通过坚果云同步到其他电脑,而每台电脑的 Clash Verge 都会从自己的软连接读到同步后的脚本。
这次踩坑的结论
这次问题的关键不是 Clash Verge,也不是 Script.js,而是我把坚果云的“总入口”误认为了“普通同步目录”。
以后再用坚果云同步某个工具的配置文件,我会先确认三件事:
- 文件是不是放在一个普通本地目录里。
- 这个普通本地目录是不是通过坚果云客户端明确设置为同步目录。
- 应用程序读取配置的位置,是不是通过软连接或其他方式指向这份同步文件。
这样比直接往坚果云侧边栏入口里塞目录要稳得多,也更容易迁移到其他电脑。
这类问题看起来只是一个小路径问题,但它提醒我:同步工具的“入口”“云端目录”“本地同步目录”不是同一个概念。路径看起来像在坚果云里,不代表它就处在一个正确的同步关系里。
[DRAFT_RESTORED]
已恢复你上次未提交的评论草稿。
正文草稿仅保留在当前标签页;若浏览器已记住你的身份信息,昵称、邮箱和个人网站可在其他文章页自动回填。