跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
RustNode.js大前端

Tauri 项目结构解析:前端壳与 Rust 内核的协作及构建流程

Tauri 采用前端资源加 Rust 后端的双层架构。前端负责 UI 渲染,Rust 处理系统能力与安全边界。构建时前端编译为静态资源,由 Rust 侧打包进应用。配置中心 tauri.conf.json 管理窗口与权限,capabilities 控制命令暴露。移动端需将逻辑置于 lib.rs 以复用入口。工程上建议前后端职责分离,敏感操作仅通过 Rust commands 暴露。支持纯 Rust UI 方案如 Yew。整体流程类似静态站点托管但具备原生能力。

beaabea发布于 2026/4/8更新于 2026/7/2337 浏览

1. 顶层(前端工程):就是一个普通的 Web 项目

Tauri 的项目结构非常'工程化',通常由两部分组成:

  • 可选的 JavaScript/前端工程(负责 UI,最终产出静态资源)
  • 必须的 Rust 工程(在 src-tauri/,负责窗口、系统能力、打包分发、安全边界)

一个典型目录结构如下:

.
├── package.json
├── index.html
├── src/
│   └── main.js
└── src-tauri/
    ├── Cargo.toml
    ├── tauri.conf.json
    ├── src/
    │   ├── main.rs
    │   └── lib.rs
    └── capabilities/
        └── default.json

顶层的 package.json / index.html / src/main.js 和你做一个静态站点或 SPA 没本质区别。你可以用 Vite、Webpack、Next(需适配静态导出)、SvelteKit 等,只要最终能产出静态资源给 Tauri 加载即可。

核心心智模型:

  • 开发模式下跑的是 dev server(热更新、调试体验好)
  • 构建时要先把前端编译成静态文件(dist 等),再由 Rust 侧打包进应用

所以前端这部分可以自由替换,Tauri 不绑架框架。

2. src-tauri(Rust 工程):这是 Tauri 的'应用外壳 + 能力层'

src-tauri/ 是一个标准 Cargo 项目,只是比普通 Rust 项目多了几类 Tauri 专用文件夹和配置文件。

2.1 tauri.conf.json:Tauri 的总控配置中心

它是最核心的配置文件,典型会包含:

  • 应用 identifier(包名/唯一标识)
  • 窗口标题、窗口行为
  • dev server URL(开发模式加载哪个地址)
  • 构建时静态资源目录
  • 打包配置(安装包类型、签名、图标路径、权限等)

同时,它还是 Tauri CLI 定位 Rust 工程的'标记文件'。CLI 本质上就是先找到 tauri.conf.json,再按配置去启动前端、编译 Rust、打开窗口。

你在项目里最常改动的地方之一就是它。

2.2 capabilities/:安全模型的'许可清单'

这块非常重要,但很多人刚上手会忽略。

核心原则是:你在 JS 里想调用 Rust 命令(invoke),必须在 capability 文件里允许它。所以 capabilities/default.json 本质上就是'你的应用允许暴露哪些能力给前端'。

这套机制的价值:

  • 把'前端能做什么'变成显式声明,而不是默认全开
  • 更适合做企业级的权限治理与审计
  • 也让你在插件/命令越来越多时不至于失控

工程建议:

  • 命令按模块分组,不要一股脑全塞 default
  • 对敏感能力(文件系统、执行外部命令、系统信息、网络访问等)单独 capability,方便环境隔离(dev/production、内部版/外部版)
2.3 icons/:应用图标的默认输出与引用目录

通常你会用 tauri icon 之类的命令从一张源图生成多平台图标,输出到 src-tauri/icons/,然后在 tauri.conf.json > bundle > icon 里引用。

建议:

  • 源图尽量用高分辨率正方形(例如 1024×1024 PNG)
  • 图标生成后别手动改一堆尺寸文件,重新生成更可控
2.4 build.rs:接入 Tauri 构建系统的'挂钩'

build.rs 一般会调用 ,用于让 Cargo 在构建时执行 Tauri 的一些构建步骤,参与资源打包/配置生成等流程。你多数时候不需要改它,除非你做很深的构建定制。

tauri_build::build()
2.5 src/lib.rs:你真正该写 Rust 业务逻辑的地方(尤其是移动端)

这里是很多人第一次看到会疑惑的点:为什么不把逻辑写在 main.rs?

原因是移动端构建方式不同:

  • 移动端会把你的应用编译成 library,由平台框架(iOS/Android)加载
  • 因此需要一个可复用的入口函数,放在 lib.rs 更合理
  • 你会看到类似 #[cfg_attr(mobile, tauri::mobile_entry_point)] 的标记,用于移动端入口

最佳实践是:

  • 业务命令(commands)、插件初始化、状态管理等,优先写在 lib.rs
  • 让桌面与移动共用同一套初始化逻辑,减少分叉
2.6 src/main.rs:桌面端入口,尽量别改

通常 main.rs 只做一件事:调用 app_lib::run()(或者你的库名对应的 run)。官方文档建议为了让桌面端复用移动端同一入口,main.rs 保持简单,别动它,改 lib.rs。

这里的 app_lib 对应 Cargo.toml 里的 [lib.name],也就是你的库 crate 名。

3. Tauri 的构建流程:像'静态站点托管器'一样工作

把 Tauri 想成一个'带系统能力的静态站点宿主'会特别好理解:

开发模式(dev):

  • 启动前端 dev server(如 Vite 5173)
  • Tauri 窗口加载 dev server URL
  • 你改前端代码热更新;你改 Rust 代码触发重编译/重启

构建模式(build/bundle):

  1. 先把前端编译成静态文件(dist)
  2. 再编译 Rust 工程
  3. Rust 把静态资源打包进最终应用(并按配置输出安装包/可执行文件)

所以前端这边你要做的事情,和'发布一个静态网站'高度一致:构建产物、资源路径、路由模式(history/hash)这些依旧是关键点。

4. 如果你只想写 Rust,不要前端怎么办

可以,Tauri 也支持'纯 Rust UI/前端生态'的路线(例如 Yew/Leptos/Sycamore),甚至你可以把顶层 JS 工程完全删掉:

  • 直接把 src-tauri/ 当成仓库根目录
  • 或把它作为 Rust workspace 的一个 member

这时你的项目就是纯 Cargo 结构,Tauri 仍然负责窗口与 WebView,但 UI 的生成方式由 Rust 侧前端方案决定。

5. 工程落地小建议:让结构更'可维护'

针对中大型应用,建议从一开始就把边界划清:

  • 前端:只负责 UI 与状态,不直接接触敏感能力
  • Rust:用 commands 暴露最小能力面,所有权限控制、输入校验、文件路径规范化都放 Rust
  • capabilities:把'能调用什么'当成发布治理点,代码评审时重点看它有没有被滥开

目录

  1. 1. 顶层(前端工程):就是一个普通的 Web 项目
  2. 2. src-tauri(Rust 工程):这是 Tauri 的“应用外壳 + 能力层”
  3. 2.1 tauri.conf.json:Tauri 的总控配置中心
  4. 2.2 capabilities/:安全模型的“许可清单”
  5. 2.3 icons/:应用图标的默认输出与引用目录
  6. 2.4 build.rs:接入 Tauri 构建系统的“挂钩”
  7. 2.5 src/lib.rs:你真正该写 Rust 业务逻辑的地方(尤其是移动端)
  8. 2.6 src/main.rs:桌面端入口,尽量别改
  9. 3. Tauri 的构建流程:像“静态站点托管器”一样工作
  10. 4. 如果你只想写 Rust,不要前端怎么办
  11. 5. 工程落地小建议:让结构更“可维护”
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Java Web 开发入门:基础概念与静态资源解析
  • 基于 Leaflet-Trackplayer 实现高速轨迹 WebGIS 可视化实战
  • 基于 OpenClaw 和 Ollama 搭建本地 AI 智能体教程
  • Ollama 支持 Llama 3.2 Vision 及视觉 RAG 系统搭建指南
  • 基于 Leaflet Trackplayer 的 WebGIS 高速公路轨迹可视化
  • Java 多线程与并发核心机制详解
  • C++ string 类模拟实现详解
  • MC.JS WEBMC1.8 实战:构建在线多人沙盒游戏
  • GCC 编译系列:静态库工具 AR 详解
  • GitHub Copilot Pro 使用指南与模型配额解析
  • CSP 信奥赛 C++ 摩尔投票算法详解
  • SpringBoot 集成 RabbitMQ 常见消息模式示例
  • Android DL 插件化开发步骤与核心注意事项
  • 2026 年求职指南:纯 LLM、多模态大模型与 AIGC 赛道对比
  • C++ 高精度时间库 chrono 详解
  • AI 中的 Skills 详解:核心机制与应用场景
  • Web 前端基础:HTML 核心语法与常用标签
  • 网络安全从业人员必备认证证书指南
  • 进程概念详解:命令行参数、环境变量与地址空间
  • 万方 AIGC 检测未通过?多款降 AI 工具实测效果分析

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online