Skip to content

5 分钟释放 23 GB 硬盘空间:Rust 与 Tauri 项目的 Cargo 瘦身指南

Harry
Lang
原文 中文

如果你使用 TauriRust 开发桌面/Web 应用,大概率也遇到过这个让人抓狂的时刻:

当你打开系统设置或磁盘空间分析工具,想看看 Mac 或笔记本硬盘为什么突然爆满时,往往会在项目代码库中发现一个个庞大得吓人的文件夹:

~/code/nextai-translator/src-tauri/target   --->  8.00 GB
~/code/lingoloop/src-tauri/target           --->  7.53 GB
~/code/yolo/src-tauri/target                --->  7.50 GB

仅仅 三个 项目,就吃掉了 超过 23 GB 空间!

如果你对这一幕似曾相识,先别慌——你的代码并没有膨胀。这其实是 Rust 构建系统 Cargo 为了提升编译速度而设计的特性。但如果听之任之,Cargo 会毫不留情地吞噬你的整块 SSD 磁盘。

在这篇文章中,我们将剖析 为什么 会发生这种情况,以及 一行全局配置 如何彻底阻止 Cargo 在每个独立项目中生成数 GB 大小的 target 文件夹。


🔍 为什么 Cargo 会占用这么多空间?

Rust 的编译设计理念是 优先保证极致的编译速度,而非最小化磁盘占用。当你运行 cargo buildpnpm dev-tauri 时,Cargo 会在幕后执行大量繁重的构建工作:

  1. deps/(依赖缓存): 将依赖树中的每一个 crate(如 tokioserdetauri 等)编译为静态目标文件(.rlib.dylib)。最关键的是,Cargo 绝不会自动清理旧版本的依赖编译产物。 当你升级某个依赖库时,新旧版本的编译文件会一起堆积在 deps/ 文件夹中。
  2. 调试符号(Debug Symbols): 开发/调试构建会包含庞大的符号映射表,以便在出现 panic 或 stack trace 时能精确指向第三方 crate 的代码行号。
  3. incremental/(增量编译缓存): 记录函数级别的编译状态,让你修改一行代码后的重新编译耗时从 30 秒缩短到 1 秒。
  4. build/ 存放 C/C++ 原生底层的中间构建产物(例如 WebView 或 OpenSSL 的绑定)。

当你有 4 或 5 个 Rust/Tauri 项目时,硬盘空间轻轻松松就会被吃掉 30 至 50 GB。


🚀 解决方案:设置全局共享 Target 目录

默认情况下,每个项目都会在本地创建独立的 target/ 目录。这意味着如果项目 A 和项目 B 都依赖 serdetauri,Cargo 就会将它们重复编译两次,分别生成两个 7 GB 的大文件夹。

我们可以通过配置全局 Cargo,让 所有 项目统一使用一个 中央共享 Target 目录,一劳永逸解决这个问题。

第一步:添加全局 Cargo 配置

创建或修改全局配置文件 ~/.cargo/config.toml

[build]
target-dir = "/Users/yourusername/.cargo/shared-target"

或者直接在终端中运行这行命令(请将 yourusername 替换为你的系统用户名):

mkdir -p ~/.cargo && echo '[build]\ntarget-dir = "'"$HOME"'/.cargo/shared-target"' >> ~/.cargo/config.toml

配置生效后会发生什么?


🧹 第二步:删除旧的 Target 文件夹,释放硬盘空间

全局配置生效后,你可以安全地删掉各个项目目录中残留的旧 target 文件夹:

# 清理项目下的 target 文件夹
rm -rf ~/code/*/src-tauri/target
rm -rf ~/code/*/target

瞬间释放 23+ GB 硬盘空间! 🎉


🛠️ 进阶技巧:多项目自动化扫除

如果你开发了大量的 Rust 项目,想要一个更智能的自动化工具来扫描和清理旧的构建文件,可以安装 cargo-clean-all

cargo install cargo-clean-all

# 扫描并清理 ~/code 目录下的所有 Rust 项目构建缓存
cargo-clean-all ~/code

总结对比

配置前配置后
每个项目各自占用 ~7–10 GB 的 target/ 文件夹项目目录内部占用 0 GB
每个项目都重复编译相同的依赖项依赖项在共享缓存中仅编译 一次
难以排查到底是哪个项目在暴饮暴食占用空间所有构建缓存统一收拢在 ~/.cargo/shared-target

如果你的 SSD 也面临磁盘空间告急的窘境,不妨花 2 分钟配置一下 ~/.cargo/config.toml — 你的硬盘一定会感谢你!


觉得有用?欢迎分享给身边的 Rust 与 Tauri 开发者! 🦀

Next
在 Yolo 中实现 Programmatic Tool Calling:基于 QuickJS WASM 沙盒的 AI 代码执行