Rust 新手如何借助 AI 完成第一个 Tauri 2 项目?

113 阅读3分钟

正文


Rust 新手如何借助 AI 完成第一个 Tauri 2 项目?


前言

作为一个前端开发者,之前想做桌面应用首选就是 Electron。但 Electron 的痛点大家都知道:打包体积大、内存占用高

Tauri 2.0 发布后,我决定试试看。问题是——我不会 Rust

这篇文章记录一下我是如何在 AI 辅助下,从零开始完成一个完整的 Tauri 2 项目的。

为什么选 Tauri 而不是 Electron?

先说结论:

对比项TauriElectron
打包体积~10MB~150MB
内存占用~50MB~200MB+
后端语言RustNode.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 能让你更快地写出能跑的代码,但不能替你思考。

最终效果

image01.png

主要功能:

  • 支持单视频、合集、分P
  • 批量任务队列
  • 多清晰度选择(4K/1080P/720P)
  • aria2 多线程加速,断点续传
  • 深色模式
  • 应用内自动更新

代码已开源:github.com/gaopengbin/…

小结

作为一个 Rust 新手,整个项目做下来最大的感受是:Tauri 2 + AI 辅助大大降低了入门门槛

如果你也想尝试 Tauri,希望这篇文章能给你一些参考。

项目还在持续更新,欢迎 Star 和 Issue!