Tauri 初体验:开发 Todo 应用

简介: 本文主要介绍了使用 Tauri 开发一款桌面端应用的流程,包括创建项目,开发,调试和打包。

Tauri 是什么

image-20220823141114429

Tauri 是一个基于 Rust 实现的跨端桌面应用开发工具。应用的界面仍然可以使用前端进行开发,你可以使用原生的HTML,CSS,JS,也可以使用 React 、Vue 等前端框架,这一点并不受限制。

相比于 Electron,它的突出优点就是体积小。众所周知,Electron 相当于是打包了一个小型浏览器,体积大,还占内存。而 Tauri 开发的应用,前端使用操作系统的 webview,后端集成了 Rust,使得打包后的体积相当小。有人对比了打包同样一个 Hello World 程序,Electron 打包的应用在 50 MB 左右,而 Tauri 只有 4 MB 大小。

本文将演示如何创建一个 Tauri 项目,并打包成 windows 平台下的应用。由于我尚未掌握 Rust ,所以示例应用不会演示后端部分的开发。

示例代码在这里,点击访问

环境准备(Windows)

Rust

Tauri 依赖 Rust,可以参考我的这篇文章《Rust 安装和 Hello World》来安装 Rust。也可以阅读官方文档《预先准备》。具体步骤就不再演示。

Microsoft Visual Studio C++ 构建工具

在上面安装 Rust 时会自动安装。也不再演示。

WebView2

Tauri 借助 WebView2 在 Windows 上呈现 Web 内容。我使用的是Windows 11,已经预装 WebView2。如果是 Windows 10,可以从Microsoft 网站下载并运行常青版引导程序,会自动为系统下载合适的版本。

创建项目

使用脚手架创建项目

官方文档推荐使用 create-tauri-app 脚手架来创建 Tauri 项目,它支持原生 HMTL/CSS/Javascript,也支持其他前端框架,如 React、Vue、Svelte。文档推荐使用 Vite 来构建前端应用。

我们使用 pnpm 创建项目:

pnpm create tauri-app

如果你使用的是 npm 或者 yarn,可以这样创建项目:

npm create tauri-app
# or
yarn create tauri-app

创建的过程中,会提示输入项目名和选择一个包管理工具,其中 cargo 是 rust 的包管理工具,我们选择自己熟悉的即可: image-20220823145326084

接着是选择一个 UI 模板,这里我们选择使用 vue:

image-20220823145447090

之后项目就创建完成了,进入项目目录和安装依赖:

image-20220823145619449

安装好依赖后,启动项目:

pnpm tauri dev

该命令,首先会执行 pnpm dev,也就是启动一个 vite 脚手架来前端页面:

image-20220823145937707

大概经过 3 分钟左右的编译,Rust 后端程序也启动了,就会自动弹出 Tauri 应用:

image-20220823150326376

image-20220823150500895

Tauri 项目目录结构

项目创建完成之后,进入项目目录,来看下它的结构。

其实就是在一个 Vite 脚手架创建的 Vue 项目中,又插入了一个 Rust 后端程序。

Vue 部分的无需多言了,来看下 Rust 部分的:

  • src-tauri/src:这里写 Rust 代码。很遗憾我还不会。本文也就不写了。
  • src-tauri/target:这里存放了 tauri 应用编译构建时的代码
  • src-tauri/Cargo.toml:相当于前端项目中的 package.json,是 rust 项目的包文件信息
  • src-tauri/tauri.conf.json:Tauri 应用的配置文件,可以设置应用名称,打包环境,打包命令等等信息。

image-20220823151317270

开发

熟悉了 Tauri 应用的基本结构之后,我们来实现一个简单的 todo 应用。

安装组件库

我们引入 Element Plus 组件库,使用它的 ElButton 组件和 ElInput 组件。

pnpm add element-plus

还需要用到 Element Plus 提供的图标:

pnpm add @element-plus/icons-vue

配置组件的按需导入:

pnpm add -D unplugin-vue-components unplugin-auto-import

vite.config.js

import { defineConfig } from "vite";
import vue from "@vitejs/plugin-vue";
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    })
  ]
  // ......
})

安装 Sass

再安装一个 Sass 预处理器:

pnpm add sass

写一个 todo

直接在 App.vue 中实现:

<script setup>
import { ref } from 'vue';
import { Close } from '@element-plus/icons-vue'

let id = 0
const todosList = ref([])
const text = ref('')

const onAddTodo = () => {
  todosList.value.push({
    id: id++,
    text: text.value
  })
}

const onComplete = index => {
  todosList.value.splice(index, 1)
}

</script>

<template>
  <div class="todo-container">
    <h1>Todo List</h1>
    <div class="head">
      <el-input type="text" v-model="text"></el-input>
      <el-button @click="onAddTodo" type="primary">添 加</el-button>
    </div>
    <div class="list" v-if="todosList.length">
      <ul>
        <li v-for="(todo, index) in todosList" :key="todo.id">
          <span>{{ index + 1 }}. </span>
          <span>{{ todo.text }}</span>
          <el-icon :size="16" color="gray" @click="onComplete(index)" style="cursor: pointer;">
             <Close />
          </el-icon>
        </li>
      </ul>
    </div>
  </div>
</template>

预览下效果:

image-20220823155759095

调试

调试和开发前端应用一样,按 F12 ,打开开发者工具进行调试。

image-20220823155928260

打包

在命令中执行打包命令:

pnpm tauri build

会报错:

image-20220823160137991

提示我们要修改 identifier 的值,打开 tauri.conf.json进行修改。

原来的:

  "identifier": "com.tauri.dev",

修改为:

  "identifier": "com.tauri.build",

然后再次执行打包命令,此时能正常打包了,大概也要花三五分钟左右的时间:

image-20220823160435428

打包完还要从 Github 上下载一个 wix3 的程序,用来构建 .msi 格式的安装包,大小为 33.1 MB,由于网络情况下载会很慢,大概率下载不下来。

提前下载好(点此下载),解压后的内容放到 C:\Users\用户名\AppData\Local\tauri\WixTools 目录下。

然后再次执行打包命令:

image-20220823161035666

打包生成的安装包,会放到项目的 src-tauri/target/release/bundle/msi 目录下,而且体积非常小:

image-20220823161220524

双击安装就能使用了:

image-20220823161245674

image-20220823161329112

小结

到此为止,我们体验了一把使用 Tauri 开发桌面端应用的流程。可以感知到,它对前端开发者是十分友好的,但是如果想深入掌握它,必须学习 Rust,增加了学习成本。这是相比于 Electron 的劣势。它的优势就不必多说了,得益于 Rust,体积小,性能好,安全性高。

目录
相关文章
|
JSON 自然语言处理 数据格式
Tauri 开发实践 — Tauri 自定义多语言菜单开发
本文介绍了如何在 Tauri 应用中实现自定义菜单并支持多语言。首先,通过 `Translator` 类加载和解析多语言 JSON 文件,实现简单的翻译功能。接着,创建包含文件、编辑和窗口子菜单的基本菜单结构,并根据当前语言进行翻译。最后,在主函数中读取语言设置,创建菜单并处理菜单事件,确保应用的国际化和用户体验。源码可在 GitHub 上查看。
620 2
|
Rust 前端开发 JavaScript
Tauri 开发实践 — Tauri 日志记录功能开发
本文介绍了如何为 Tauri 应用配置日志记录。Tauri 是一个利用 Web 技术构建桌面应用的框架。文章详细说明了如何在 Rust 和 JavaScript 代码中设置和集成日志记录,并控制日志输出。通过添加 `log` crate 和 Tauri 日志插件,可以轻松实现多平台日志记录,包括控制台输出、Webview 控制台和日志文件。文章还展示了如何调整日志级别以优化输出内容。配置完成后,日志记录功能将显著提升开发体验和程序稳定性。
736 1
Tauri 开发实践 — Tauri 日志记录功能开发
|
存储 前端开发 安全
Tauri 开发实践 — Tauri 原生能力
本文介绍了如何使用 Tauri 框架构建桌面应用,并详细解释了 Tauri 提供的原生能力,包括文件系统访问、系统托盘、本地消息通知等。文章通过一个具体的文件下载示例展示了如何配置 Tauri 来使用文件系统相关的原生能力,并提供了完整的代码实现。最后,文章还提供了 Github 源码链接,方便读者进一步学习和参考。
621 1
Tauri 开发实践 — Tauri 原生能力
|
Rust 前端开发 关系型数据库
Tauri 开发实践 — Tauri 集成本地数据库
本文介绍了在 Tauri 框架中集成本地数据库的几种方案,包括直接绑定 SQLite、使用第三方数据库库和使用 tauri-plugin-sql-api 插件。最终选择了 tauri-plugin-sql-api,因为它集成简单、支持多种数据库类型,并且与 Tauri 框架深度整合,提升了开发效率和安全性。文章详细介绍了如何安装和使用该插件,以及如何编写核心代码实现数据库操作。
1056 2
|
存储 Rust 前端开发
Tauri 开发实践 — Tauri 配置介绍
本文首发于微信公众号“前端徐徐”,主要讲解`package.json`、`Cargo.toml`及`tauri.conf.json`三个文件的配置。其中,`tauri.conf.json`最为复杂,涉及众多配置项。`package.json`用于配置前端依赖与脚本;`Cargo.toml`用于声明Rust应用依赖;`tauri.conf.json`则管理前端资源、API白名单等。这些配置对于Tauri应用的开发至关重要。
817 5
|
10月前
|
人工智能 JavaScript 前端开发
字节最新AI 版IDE:用Trae开发网站打包信息追踪插件,国产版Cursor表现如何?
本文介绍了如何使用字节最新推出的AI编程工具Trae,通过零代码方式快速开发一款名为`dist-info`的前端插件。该插件能够将Git信息或自定义内容注入HTML文件中,兼容Webpack和Vite项目。开发者只需在浏览器控制台输入`info`,即可轻松查看代码的相关信息。文章详细描述了插件的背景、开发流程、核心代码实现以及优化建议,并展示了如何借助Trae高效完成项目搭建和代码编写。
1344 0
字节最新AI 版IDE:用Trae开发网站打包信息追踪插件,国产版Cursor表现如何?
|
Rust 前端开发 JavaScript
Tauri 开发实践— Tauri 怎么样
Tauri 是一个用于构建高效、小型二进制文件的框架,适用于所有主流桌面及移动平台。开发人员可以利用任何可编译为 HTML、JavaScript 和 CSS 的前端框架构建应用,并借助 Rust、Swift 或 Kotlin 进行后端开发。Tauri 采用三层架构,包括 tauri-app、WRY(跨平台 Webview 库)和 TAO(跨平台窗口管理器)。相较于 Electron,Tauri 使用系统内置浏览器引擎执行 Web APP,具有更小的资源占用和更高性能。详情见:[Tauri 官网](https://tauri.app/)。
1330 0
Tauri 开发实践— Tauri 怎么样
|
缓存 Rust 前端开发
【一起学Rust | 框架篇 | Tauri2.0框架】Tauri2.0环境搭建与项目创建
【一起学Rust | 框架篇 | Tauri2.0框架】Tauri2.0环境搭建与项目创建
1988 0
|
前端开发 安全 Android开发
跨平台开发的新纪元:Tauri 2.0 横空出世,移动端、桌面端一网打尽!
Tauri 2.0 正式版于 2024 年 10 月 2 日发布,带来了多项重大更新。此次更新不仅全面支持 iOS 和 Android,实现“一次编写,到处运行”,还升级了插件系统,增强了灵活性与可扩展性。安全性大幅提升,引入新的权限系统,并优化了 IPC 层,支持原始有效载荷传输,大幅提高性能。此外,Tauri 2.0 还支持热模块替换(HMR),简化了应用分发流程,成为跨平台开发的重要里程碑。
2111 0
跨平台开发的新纪元:Tauri 2.0 横空出世,移动端、桌面端一网打尽!
|
JavaScript 前端开发 API
vue3 v-md-editor markdown编辑器(VMdEditor)和预览组件(VMdPreview )的使用
本文介绍了如何在Vue 3项目中使用v-md-editor组件库来创建markdown编辑器和预览组件。文章提供了安装步骤、如何在main.js中进行全局配置、以及如何在页面中使用VMdEditor和VMdPreview组件的示例代码。此外,还提供了一个完整示例的链接,包括编辑器和预览组件的使用效果和代码。
vue3 v-md-editor markdown编辑器(VMdEditor)和预览组件(VMdPreview )的使用