tauri桌面应用开发入门

简介

tauri是一款基于web的桌面应用前端框架

因为使用webviews渲染,而不是像electron自带一个浏览器内核,所以打包之后的空间更小,十几mb

前端界面使用web,可以采取流行的框架,入react,vue等

前端后台采用rust,弥补前端无法直接访问操作系统,常用于访问本地文件系统

官方中文文档

运行环境

MSVC

作用 : 在 Windows 平台上为 Rust 和 Tauri 提供编译、链接支持。

安装 : 下载cpp构建工具,安装工作负荷->左面应用与移动应用->使用c++的桌面开发

webview2

作用 : 渲染前端

安装 : 在win10及以上默认安装

rust

作用 : 作为前端的后台,为web前端提供与操作系统交互能力

安装 : 下载64位,然后直接回车

如果下载太慢,在安装包目录打开ps,输入下面指令,使用中科大的源

sh 复制代码
$ENV:RUSTUP_DIST_SERVER='https://mirrors.ustc.edu.cn/rust-static'
$ENV:RUSTUP_UPDATE_ROOT='https://mirrors.ustc.edu.cn/rust-static/rustup'
.\rustup-init.exe

cargo

rust的包管理工具,换中科大源,windows目录%USERPROFILE%\.cargo,新建文件config.toml,输入以下内容

toml 复制代码
[source.crates-io]
replace-with = 'ustc'

[source.ustc]
registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"

nodejs

前端运行环境

安装 : 官方下载链接

第一个工程

vscode里面终端使用的ps,输入下面命令初始化工程

sh 复制代码
irm https://create.tauri.app/ps | iex
cd .\tauri-app\

按提示选择自己需要的配置,生成完成后

其中src就是前端代码,src-tauri是rust后端代码

输入下面,根据package.json安装依赖

sh 复制代码
npm install

运行下面执行,可以得到一个应用界面

如果下载过慢,请换cargo源

sh 复制代码
npm run tauri dev

开发阶段可以

sh 复制代码
npm run dev

打包

sh 复制代码
npm run tauri build

然后就可以在src-tauri/target/release里面得到打包的程序,大约10mb

压缩之后大约3mb

前台

src/目录,可以选自自己常用的前端框架

前端的修改可以实时渲染

调试

应用运行时,可以按f12进行调试,跟浏览器一样

文件操作

使用系统封装好的函数接口

先安装官方插件

sh 复制代码
npm run tauri add fs

然后前端调用

tsx 复制代码
import { writeFile, BaseDirectory } from '@tauri-apps/plugin-fs';

async function greet() {
    setGreetMsg(await invoke("greet", { name }));

    let encoder = new TextEncoder();
    let data = encoder.encode("Hello, world!");
    await writeFile("hello.txt", data, { baseDir: BaseDirectory.Desktop })
  }

在src-tauri/capabilities/defaut.json的permissions中为文件操作的插件添加权限

json 复制代码
"fs:default",
"fs:scope-desktop",
"fs:write-all"

后台

src-tauri/目录,即rust后台,为前端提供访问操作系统资源的能力

一般操作官方都有封装好的插件供前端直接调用,入前面的文件操作

自定义函数

可以看到lib.rs

如下,提供了一个前端可调用的命令greet

封装一个自定义函数需要两步

  1. 使用#[tauri::command]暴露接口
  2. invoke_handler中注册函数
rust 复制代码
#[tauri::command]//宏定义,暴露greet,可通过前端invoke调用
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");
}
相关推荐
m0_480502645 小时前
Rust 登堂 之 函数式编程(三)
开发语言·后端·rust
小喷友12 小时前
阶段一:入门(理解 Rust 的基本概念)
前端·rust
m0_480502641 天前
Rust 入门 注释和文档之 cargo doc (二十三)
开发语言·后端·rust
盒马盒马2 天前
Rust:变量、常量与数据类型
开发语言·rust
傻啦嘿哟2 天前
Rust爬虫实战:用reqwest+select打造高效网页抓取工具
开发语言·爬虫·rust
咸甜适中2 天前
rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十四)垂直滚动条
笔记·学习·rust·egui
张志鹏PHP全栈2 天前
Rust第四天,Rust中常见编程概念
后端·rust
咸甜适中2 天前
rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(十五)网格布局
笔记·学习·rust·egui
susnm3 天前
最后的最后
rust·全栈
bruce541104 天前
深入理解 Rust Axum:两种依赖注入模式的实践与对比(二)
rust