正文
Rust 新手如何借助 AI 完成第一个 Tauri 2 项目?
前言
作为一个前端开发者,之前想做桌面应用首选就是 Electron。但 Electron 的痛点大家都知道:打包体积大、内存占用高。
Tauri 2.0 发布后,我决定试试看。问题是——我不会 Rust。
这篇文章记录一下我是如何在 AI 辅助下,从零开始完成一个完整的 Tauri 2 项目的。
为什么选 Tauri 而不是 Electron?
先说结论:
| 对比项 | Tauri | Electron |
|---|---|---|
| 打包体积 | ~10MB | ~150MB |
| 内存占用 | ~50MB | ~200MB+ |
| 后端语言 | Rust | Node.js |
| 安全性 | 更高 | 一般 |
我的场景是做一个视频工具,需要内置 ffmpeg、aria2 这些二进制文件。如果用 Electron,加上这些依赖,打包体积可能要到 200MB+。而 Tauri 的基础体积只有 10MB 左右,即使加上这些工具,最终也就 60MB 左右。
项目要做什么
简单说,就是一个视频离线工具,主要支持国内某主流视频平台。核心需求:
- 支持单视频、合集、分P
- 批量任务队列
- 多清晰度选择
- 多线程下载 + 断点续传
- 开箱即用,普通用户不用装 Python/ffmpeg
最后一点很重要,市面上很多工具要么要装环境,要么是命令行,对普通用户太不友好了。
技术方案
前端:Vue 3 + TypeScript + Element Plus
后端:Tauri 2 + Rust
下载引擎:yt-dlp + aria2 + ffmpeg(sidecar 内置)
踩坑实录
坑 1:Rust 所有权和生命周期
这是 Rust 新手最大的障碍。刚开始写的时候,各种借用检查报错让我很崩溃。
AI 辅助的作用:Copilot 能给出正确的写法,但我发现一个问题——如果不理解原理,同样的错误会反复犯。所以我的经验是:AI 生成代码,但你要去搜「为什么这样写」。
// 错误示例:所有权已经转移
fn process(data: String) {
let result = data; // data 所有权转移给 result
println!("{}", data); // 报错!data 已经无效
}
// 正确写法:使用引用
fn process(data: &String) {
println!("{}", data); // OK
}
坑 2:Sidecar 打包外部工具
为了实现「开箱即用」,需要把 yt-dlp、ffmpeg、aria2 打包进应用。Tauri 提供了 sidecar 功能:
// tauri.conf.json
{
"bundle": {
"externalBin": [
"binaries/yt-dlp",
"binaries/ffmpeg",
"binaries/aria2c"
]
}
}
踩坑点:文件名必须包含平台后缀,比如 yt-dlp-x86_64-pc-windows-msvc.exe,否则打包时会找不到文件。
坑 3:Windows 中文路径编码
调用外部命令时,如果路径包含中文,很容易出现乱码问题。
解决方案:统一使用 UTF-8 编码,并在调用前处理路径。
use std::os::windows::process::CommandExt;
Command::new("yt-dlp")
.creation_flags(0x08000000) // CREATE_NO_WINDOW
.arg("-o")
.arg(&output_path)
.spawn()
坑 4:异步任务与 UI 通信
下载是耗时操作,必须异步执行,否则会卡死界面。同时还要把进度实时同步给前端。
Tauri 的 Event 机制非常适合这个场景:
// Rust 侧发送进度
app_handle.emit("download-progress", ProgressPayload {
percent: 50,
speed: "1.2MB/s".to_string(),
})?;
// 前端监听
import { listen } from '@tauri-apps/api/event'
listen('download-progress', (event) => {
console.log(event.payload) // { percent: 50, speed: "1.2MB/s" }
})
AI 辅助开发的心得
用了大半年 Copilot,总结几点:
适合交给 AI 的:
- 样板代码、重复性代码
- API 调用、类型定义
- 单元测试
- 不熟悉的语言语法
不能完全依赖 AI 的:
- 架构设计
- 复杂业务逻辑
- 性能优化
- 理解「为什么」
AI 能让你更快地写出能跑的代码,但不能替你思考。
最终效果
主要功能:
- 支持单视频、合集、分P
- 批量任务队列
- 多清晰度选择(4K/1080P/720P)
- aria2 多线程加速,断点续传
- 深色模式
- 应用内自动更新
代码已开源:github.com/gaopengbin/…
小结
作为一个 Rust 新手,整个项目做下来最大的感受是:Tauri 2 + AI 辅助大大降低了入门门槛。
如果你也想尝试 Tauri,希望这篇文章能给你一些参考。
项目还在持续更新,欢迎 Star 和 Issue!