Rust+Tauri2 桌面应用创建、运行与打包全流程

前言

Tauri 是一个使用 Rust 作为后端、Web 技术作为前端的跨平台桌面应用框架。
相比 Electron,Tauri 生成的安装包体积更小、内存占用更低,安全性也更强。
Tauri 2 是目前的稳定主线版本,引入了全新的插件权限体系和更简洁的配置方式。
本文以 Windows 平台为主,介绍从环境准备到打包发布的完整流程。

环境准备

Microsoft Visual C++ 生成工具

Rust 在 Windows 上依赖 MSVC 工具链进行编译,需要提前安装 C++ 构建环境。
前往 Visual Studio 生成工具下载页 下载并运行安装程序,勾选 C++ 生成工具Windows 10/11 SDK

WebView2

Tauri 在 Windows 上使用 WebView2 渲染页面内容。
Windows 11 已预置 WebView2,Windows 10 需前往 微软官方页面 下载并安装”常青版引导程序”。

Rust 安装

前往 https://www.rust-lang.org/tools/install 下载 rustup-init.exe 并安装。
安装完成后重启终端,执行以下命令验证安装是否成功。

1
2
rustc --version
cargo --version

若网络较慢,可配置国内镜像以加速 crates 下载。
编辑文件 C:/Users/你的用户名/.cargo/config.toml,写入以下内容(文件不存在则新建)。

1
2
3
4
5
[source.crates-io]
replace-with = 'tuna'

[source.tuna]
registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"

Node.js 安装

Tauri 前端部分使用 Node.js 构建工具,推荐使用 nvm 管理 Node 版本。
建议安装 Node.js 18+ 版本,可通过如下命令安装并切换。

1
2
3
4
nvm install 20
nvm use 20
node -v
npm -v

创建项目

初始化

进入你要存放项目的目录,执行以下命令启动交互式项目初始化向导。

1
npm create tauri-app@latest

命令执行后会依次询问:

  1. 项目名称(如 my-tauri-app
  2. 选择包管理器(npm / pnpm / yarn
  3. 选择前端语言(TypeScript / JavaScript
  4. 选择 UI 框架(Vanilla / Vue / React / Svelte 等)

根据自身技术栈选择即可,本文以 Vue + TypeScript 为例。

安装依赖

向导完成后,进入项目目录并安装前端依赖。

1
2
cd my-tauri-app
npm install

目录结构

项目创建完成后,整体目录结构如下所示。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
my-tauri-app/
├── src/ # 前端源代码
│ ├── App.vue
│ └── main.ts
├── src-tauri/ # Rust/Tauri 后端
│ ├── src/
│ │ ├── main.rs # 程序入口
│ │ └── lib.rs # 核心逻辑
│ ├── Cargo.toml # Rust 依赖配置
│ ├── tauri.conf.json # Tauri 主配置
│ └── capabilities/ # 权限配置目录(Tauri 2 新增)
├── index.html
├── package.json
└── vite.config.ts

src-tauri/tauri.conf.json 是 Tauri 的主配置文件,包含应用名称、窗口尺寸、打包标识等关键信息。
Tauri 2 新增了 capabilities/ 目录,用于细粒度地声明应用所需的系统权限。

运行

开发模式

开发时执行以下命令,Tauri 会同时启动前端 Vite 热更新服务与 Rust 后端,并打开桌面窗口。

1
npm run tauri dev

首次运行需要编译 Rust 依赖,耗时较长(约 3-10 分钟),后续增量编译会快很多。
前端代码修改后会自动热更新,Rust 代码修改后会重新编译后端。

常用命令

以下是开发阶段常用的 Tauri CLI 命令。

1
2
3
4
5
6
7
8
# 查看 Tauri CLI 版本
npm run tauri -- --version

# 添加 Tauri 官方插件
npm run tauri add <plugin-name>

# 查看信息(Rust/Node 环境诊断)
npm run tauri info

前端调用 Rust 命令

定义 Rust 命令

src-tauri/src/lib.rs 中使用 #[tauri::command] 宏定义供前端调用的函数,然后在 run() 函数中注册该命令。

1
2
3
4
5
6
7
8
9
10
11
12
13
#[tauri::command]
fn greet(name: &str) -> String {
format!("Hello, {}! You've been greeted from Rust!", name)
}

#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
tauri::Builder::default()
.plugin(tauri_plugin_opener::init())
.invoke_handler(tauri::generate_handler![greet])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}

前端调用

在前端代码中通过 @tauri-apps/api 包的 invoke 方法调用 Rust 函数,invoke 返回 Promise,支持 async/await 写法。

1
2
3
4
import { invoke } from '@tauri-apps/api/core'

const result = await invoke<string>('greet', { name: 'Tauri2' })
console.log(result) // Hello, Tauri2! You've been greeted from Rust!

注意:Rust 函数参数使用下划线命名(如 my_name),前端调用时需转换为小驼峰(如 myName)。

打包

修改打包配置

打包前先确认 src-tauri/tauri.conf.json 中的关键配置,尤其是 identifier 字段,它是应用的唯一标识,建议使用反向域名格式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"productName": "my-tauri-app",
"version": "0.1.0",
"identifier": "cn.example.my-tauri-app",
"build": {
"frontendDist": "../dist"
},
"bundle": {
"active": true,
"targets": ["nsis"],
"icon": [
"icons/32x32.png",
"icons/128x128.png",
"icons/icon.icns",
"icons/icon.ico"
]
}
}

执行打包命令

配置完成后执行以下命令进行打包,Tauri 会先编译前端再编译 Rust 后端,最终生成安装包。

1
npm run tauri build

也可以通过 --bundles 参数临时指定打包格式,优先级高于配置文件,适合在 CI 中按需输出不同格式。

1
2
3
4
5
6
7
8
# 只生成 exe(NSIS 安装包)
npm run tauri build -- --bundles nsis

# 只生成 msi(WiX 安装包)
npm run tauri build -- --bundles msi

# 同时生成 exe 和 msi
npm run tauri build -- --bundles nsis,msi

Windows 平台 targets 可选值说明:nsis 生成 .exe 安装包,msi 生成 .msi 安装包,all 同时生成所有格式。
若只需要 .exe,在 tauri.conf.json 中将 targets 设为 ["nsis"] 即可,省去每次都要附加参数的麻烦。

如果不需要任何安装包,只想得到一个可直接运行的绿色 .exe 文件,使用 --no-bundle 跳过所有打包步骤。

1
npm run tauri build -- --no-bundle

编译完成后,可执行文件位于 src-tauri/target/release/<应用名>.exe,双击即可运行,无需安装。

打包产物位于 src-tauri/target/release/bundle/ 目录下(使用 --no-bundle 时产物直接在 src-tauri/target/release/ 下)。

打包产物路径

不同平台的安装包输出位置如下所示。

1
2
3
4
5
6
7
src-tauri/target/release/bundle/
├── msi/ # Windows MSI 安装包
│ └── my-tauri-app_0.1.0_x64_en-US.msi
├── nsis/ # Windows NSIS 安装包(exe)
│ └── my-tauri-app_0.1.0_x64-setup.exe
├── deb/ # Linux deb 包
└── macos/ # macOS app 包

常见问题

WiX 工具下载失败

打包时若提示 wix311-binaries.zip 下载失败,可手动从以下地址下载并解压到对应目录。

1
2
下载地址:https://github.com/wixtoolset/wix3/releases/download/wix3112rtm/wix311-binaries.zip
解压路径:C:/Users/你的用户名/AppData/Local/tauri/WixTools/

注意 WixTools 目录下直接放可执行文件(如 candle.exe),不要再嵌套子文件夹。

Rust 编译依赖超时

cargo 拉取依赖时网络超时,确认已按前文配置清华 crates 镜像。
也可以在项目的 .cargo/config.toml 中单独配置,效果与全局配置相同。

前端资源路径 404

开发模式下前端走本地 Vite 服务,打包后走静态文件。
确认 tauri.conf.json 中的 build.frontendDist 路径与 vite.config.tsbuild.outDir 一致(默认均为 ../dist)。

验证

开发模式下可通过以下方式验证功能是否正常。

  1. 桌面窗口是否正常弹出并加载前端页面
  2. 打开浏览器 DevTools(快捷键 F12 或右键 → 检查元素)查看控制台日志
  3. 修改前端代码后页面是否自动刷新
  4. 调用 invoke 命令后是否收到 Rust 函数的返回值

打包完成后,双击安装包完成安装,运行程序验证打包产物功能与开发模式一致。

总结

使用 Tauri 2 创建桌面应用的完整步骤如下。

  1. 安装 MSVC 构建工具、WebView2、Rust、Node.js
  2. 配置 Rust crates 国内镜像(可选,但推荐)
  3. 执行 npm create tauri-app@latest 创建项目并选择技术栈
  4. 进入项目目录执行 npm install 安装前端依赖
  5. 执行 npm run tauri dev 启动开发模式
  6. src-tauri/src/lib.rs 定义 Rust 命令并注册
  7. 前端通过 invoke 调用 Rust 命令
  8. 修改 tauri.conf.json 中的 identifier 等打包配置
  9. 执行 npm run tauri build 生成安装包

注意事项:

  • 首次编译 Rust 依赖耗时较长,属于正常现象
  • identifier 必须全局唯一,建议使用反向域名格式
  • Rust 命令参数命名在 JS 侧需转换为小驼峰
  • 打包时若遇到 WiX 下载失败,需手动放置工具包