Vibe Coding 会遇到的第一道难关:硬盘空间不足
有 Vibe Coding 经验的朋友应该能理解,随便做一段时间项目,硬盘里的文件就会堆积到数百 GB。除了代码,还有设计稿、素材、演示视频和已经结束的项目归档,而 Mac 的内置硬盘又不能随意扩容,难免会遇到需要频繁清理电脑的窘境。

我原本的办法是外接一块硬盘。但用了一段时间总觉得别扭:平时要多带一个设备,出门可能忘记,万一丢了,里面的文件也可能一起没了。
经历了两周颇为不便的办公体验后,我甚至开始犹豫要不要下单 8TB 硬盘、售价 59999 元的新款 MacBook Pro 来彻底解决问题。
但下单的一刹那,银行卡余额不足的通知让我被迫冷静了下来……
那么,有没有一种办法,既能腾出本地空间,又不用多带一块硬盘?
省流:配置方案请看 https://github.com/belcheckyoung/VibeCodingonCloud
把网盘变成一个普通文件夹
我想到的是网盘。如果能把它映射到本地,在 Finder 里像普通文件夹一样读写,就能把不常用的文件放到云端,也不必多带一块硬盘。当然,正在开发的代码还是留在本地更合适,真正要搬上去的,是那些占地方又不常改动的文件。
恰好我在用阿里云盘,也有 Mountain Duck。它能把远程存储挂载到 Finder,按理说连上 WebDAV 就行。
问题很快出现:我阿里云盘的官方 WebDAV 连接方案只能读取,不能写入。这对看剧没什么影响,但对「把网盘当硬盘用」来说就卡住了。

我最初的想法是逆向客户端、模拟它的请求。这条路不是完全走不通,但客户端一更新就可能失效,还要用主账号承担风险。继续查资料后发现,其实有一条更稳妥的路:阿里云盘开放平台本身就有授权 API,只差一个能把它转换成 WebDAV 的工具。
最终方案:Mountain Duck 加 OpenList
最后跑通的组合是:用 OpenList 在 Mac 上起一个本地 WebDAV 服务,再让 Mountain Duck 连接它。

三个角色分工很清楚:
- Mountain Duck: 把 WebDAV 挂载到 Finder,负责我们平时看到的文件夹体验。
- OpenList: 运行在本机的网关,对上提供 WebDAV,对下调用网盘接口。它的阿里云盘 Open 驱动基于官方授权 API 开发。
- launchd: macOS 自带的后台服务管理,安排两者的启动顺序。这一点听起来不起眼,却是我踩得最深的坑。
这套思路也不只适用于阿里云盘。OpenList 的支持列表还包括百度网盘、夸克、115、OneDrive、Google Drive、Dropbox、S3、SMB 等。不过我只实测了阿里云盘,其他存储能否写入、需要什么会员,都要先看对应驱动的文档并自己测试。
配置教程
下面以阿里云盘为例。如果你用其他网盘,第 2、3 步要换成对应驱动的配置,其他步骤大体通用。
开始前的准备
- 会员权益: 第三方应用权益包和 SVIP 是两套权益,OpenList 属于第三方应用。我两个都开了,建议先在阿里云盘 App 里确认当前规则。
- 软件: Homebrew 和 Mountain Duck。
- 令牌方式: 我用的是 OpenList 提供的在线参数,配置最快,但令牌获取和续期会经过它的在线服务。如果介意,可以注册自己的开放平台应用。
1. 安装 OpenList
brew install openlist
openlist admin random --data ~/.openlist
openlist server --data ~/.openlist第二条命令会生成管理员密码,记得存好。第三条启动后按 Ctrl+C 停止,再把它改成只允许本机访问:
sed -i '' 's/"address": "0.0.0.0"/"address": "127.0.0.1"/' ~/.openlist/config.json
openlist server --data ~/.openlist看到 start HTTP server @ 127.0.0.1:5244 就成功了。这个窗口先保持打开。
2. 获取刷新令牌
打开 api.oplist.org,选择「阿里云盘 - 验证登录 (OAuth App)」,勾选「使用 OpenList 提供的参数」,完成授权后复制 Refresh Token。
这个令牌相当于云盘的访问凭据,不要发给别人。万一泄露,可以在阿里云盘 App 的授权管理里解除 OpenList 授权。
3. 添加云盘
打开 http://127.0.0.1:5244,登录后添加存储:
| 字段 | 填写内容 |
|---|---|
| 驱动 | AliyundriveOpen |
| 挂载路径 | /aliyun |
| 根文件夹 ID | root |
| 刷新令牌 | 上一步的 Refresh Token |
| Use online api | 开启 |
| Api url address | https://api.oplist.org/alicloud/renewapi |
| 移除方式 | Trash |
保存后状态应显示 Working。如果看不到文件,可以切换「资源库」和「备份盘」试试。
4. 开启 WebDAV 写入权限
在用户设置里勾选 WebDAV read 和 WebDAV manage。没开 WebDAV manage 会返回 403。
保存前看一眼浏览器的自动填充:密码框要保持为空,弹窗也不要挡住复选框。
5. 先用命令行测试
先别急着连 Mountain Duck,这样出错时更容易判断问题在哪一层。先运行第一条并输入密码:
read -s "PW?输入 OpenList 密码: "; echo再运行(把 用户名 换成你的):
echo "webdav write test" > /tmp/openlist-test.txt
curl -u "用户名:$PW" -T /tmp/openlist-test.txt http://127.0.0.1:5244/dav/aliyun/openlist-test.txt -w "\nHTTP %{http_code}\n"
unset PW返回 HTTP 201 或 204,就说明写入没问题。
6. 连接 Mountain Duck
新建书签,协议选 WebDAV (HTTP),不要选 HTTPS:
| 字段 | 填写内容 |
|---|---|
| 服务器 | 127.0.0.1 |
| 端口 | 5244 |
| 用户名、密码 | OpenList 的账号密码 |
| 路径 | /dav/aliyun |
这里的 HTTP 流量只在本机内部传输。连接后,在 Finder 里试试上传、改名、移动和删除。
7. 配置开机自启
这一步很关键。OpenList 如果跑在终端窗口里,窗口一关就停;Mountain Duck 如果先启动,又会错过登录。
先在第 1 步的终端窗口按 Ctrl+C 停止 OpenList,再让 launchd 接管它:
P="$HOME/Library/LaunchAgents/org.openlist.server"
mkdir -p ~/.openlist/launchd-logs
defaults write "$P" Label org.openlist.server
defaults write "$P" ProgramArguments -array "$(command -v openlist)" server --data "$HOME/.openlist"
defaults write "$P" RunAtLoad -bool true
defaults write "$P" KeepAlive -bool true
defaults write "$P" StandardOutPath "$HOME/.openlist/launchd-logs/out.log"
defaults write "$P" StandardErrorPath "$HOME/.openlist/launchd-logs/err.log"
xattr -d com.apple.quarantine "$P.plist" 2>/dev/null
launchctl bootstrap "gui/$(id -u)" "$P.plist"然后关闭 Mountain Duck 自己的「登录时启动」,改成等 OpenList 就绪后再打开:
A="$HOME/Library/LaunchAgents/org.openlist.mountainduck"
defaults write "$A" Label org.openlist.mountainduck
defaults write "$A" RunAtLoad -bool true
plutil -insert ProgramArguments -xml '<array><string>/bin/sh</string><string>-c</string><string>until /usr/bin/curl -fs -o /dev/null http://127.0.0.1:5244/ping; do sleep 1; done; sleep 3; /usr/bin/open -a "Mountain Duck"</string></array>' "$A.plist"
xattr -d com.apple.quarantine "$A.plist" 2>/dev/null
launchctl bootstrap "gui/$(id -u)" "$A.plist"最后重启一次 Mac,不要手动连接,直接往挂载目录放一个小文件。文件能自动出现在阿里云盘里,才算真正配置完成。
哪些文件应该放上去
配置成功后很容易产生一个冲动:把整个开发目录都扔进去。我就这么做过,结果 AI 工具的配置备份和会话记录也跟着上传了。这类文件可能包含敏感信息,还是一堆小文件,上传也慢。
| 文件类型 | 建议位置 | 原因 |
|---|---|---|
| 设计稿、素材、文档、导出成果 | 云盘 | 体积大、改动少 |
| 已经结束的项目归档 | 云盘 | 最能腾出空间 |
| 正在开发的代码 | 本地,用 Git 同步 | 需要快速读写,也有完整的版本记录 |
.git、node_modules、缓存、构建产物 | 本地 | 小文件多,且大多可以重新生成 |
令牌、API 密钥、.env、AI 工具配置 | 本地 | 可能包含敏感信息 |
| 正在运行的数据库 | 本地 | 同步中的文件可能不一致 |
让 Claude 或 GPT 帮你改存储位置
如果想把某个工具的默认存储位置改到云盘,建议让 AI 先盘点,而不是直接动手。下面是我根据这次教训整理的提示词,还没有经过完整实测:
我已把网盘挂载到 Mac,路径是 <挂载路径>。
我想把 <工具名称> 的默认存储位置改到 <目标目录>。
先只做只读盘点,不要修改、移动或删除文件:
1. 按官方文档确认修改方法,并给出链接。
2. 列出当前路径、总体积和文件数。
3. 标出可能含凭据或会话记录的路径,不要打开或输出内容。
4. 指出不适合放云盘的目录。
5. 给出迁移和回滚方案,区分事实和推测,然后等我确认。
我确认后,先复制一个小目录测试,不删除原文件。
密码和令牌都由我自己输入。最终效果与局限
最后的效果是:开机后 OpenList 自动运行,Mountain Duck 随后打开,我把文件拖进 Finder 里的挂载目录,它就会上传到阿里云盘。我测试了一次重启,没有手动连接,文件也成功上传了。

它很好用,但并不能完全替代本地硬盘:
- 小文件很慢: 我实测每个小文件约需 2 到 3 秒,因为每个文件都要上传再改名。代码仓库并不适合这样同步。
- 依赖网络和会员规则: 没有网络时不能指望它实时同步,网盘权益也可能调整。
- 多了一个常驻服务: OpenList 持有云盘写入权限,密码和令牌都要保管好。它的日志里也可能出现访问令牌,不要原样外传。
- 文件安全不能只靠它: 确认云端文件完整前,不要删除本地原文件;重要资料仍应有其他备份。
几 GB 的大文件上传我还没有专门测试,如果你主要放视频素材,建议先用一个文件试试速度和完整性。
我踩过的坑
出问题时,建议按这个顺序排查:OpenList 是否运行 → curl 能否写入 → Mountain Duck 能否登录 → 同步队列是否卡住。日志分别在 ~/.openlist/log/ 和 ~/Library/Logs/Mountain Duck/。
| 现象 | 原因 | 解决方法 |
|---|---|---|
重启后一直返回 401 | Mountain Duck 比 OpenList 早启动 2 秒,错过了登录 | 先重新连接,不要急着改密码;再按第 7 步调整顺序 |
| 所有文件都传不上去 | 队列最前面的任务反复失败,我遇到的是一个空文件夹重试了约 5.8 万次 | 看日志,先解决排在最前面的失败任务 |
WebDAV 返回 403 | 没有开启 WebDAV manage | 重新勾选保存,并再次确认是否生效 |
连到 443 被拒绝 | 协议选成了 WebDAV (HTTPS) | 改成 HTTP,端口填 5244 |
curl 返回 HTTP 000 | 测试文件不存在,或 OpenList 没运行 | 看状态码上方的具体报错 |
命令停在 heredoc> | 长段粘贴被截断 | 按 Ctrl+C 退出,重新执行 |
brew services 报错 | Homebrew 的这个包没有提供服务定义 | 改用 launchd |
Bootstrap failed: 5 | 我遇到过隔离标记和配置缺少启动程序两种情况 | 用 xattr 和 plutil -p 检查 |
其中最值得记住的是第一条:401 看起来是密码错误,实际却是启动顺序的问题。我最后是对比两边日志的时间,再通过「只重连、不改密码」验证,才找到原因。如果你也让 AI 帮忙排障,建议让它同样拿出日志证据,每次只改一个变量。
写在最后
这套方案没有把网盘变成一块真正的硬盘,也替代不了那台 8TB 的 MacBook Pro。但对我来说,它解决了最烦的部分:不常用的大文件有了去处,出门不用惦记那块移动硬盘,银行卡也暂时保住了。
如果你也在为 Mac 的存储空间发愁,不妨先从一个归档文件夹开始试。
