使用 Tauri 开发桌面应用程序:新一代的轻量解决方案

随着 Web 技术的不断发展,构建跨平台桌面应用程序已成为越来越多开发者的选择。目前,Electron 是最广为人知的解决方案,但它体积较大,运行时占用资源多,往往不适合注重轻量化和高性能的场景。而 Tauri 作为一款新兴框架,凭借其小巧的打包体积和原生交互能力,逐渐获得了开发者的关注。

本文将带您了解 Tauri 的基本概念、如何快速上手,并通过一个简单的实例展示 Tauri 的使用方法。

什么是 Tauri?

Tauri 是一个为构建跨平台桌面应用程序而设计的框架。它允许开发者使用现有的前端技术(如 React、Vue、Svelte 等)构建应用程序的 UI,然后通过 Rust 编写后端逻辑,从而实现高效的桌面应用。

核心特点

  1. 轻量化

    • 打包后的应用程序体积通常仅为几兆。

    • 相比 Electron,Tauri 的内存占用显著降低。

  2. 安全性

    • 默认配置具有强大的安全策略,例如内容安全策略(CSP)。

    • 使用 Rust 的安全特性,减少常见的内存漏洞问题。

  3. 跨平台支持

    • 支持 Windows、macOS 和 Linux。

  4. 前后端分离

    • UI 使用 Web 技术,逻辑层使用 Rust,从而提升应用性能。

快速开始

接下来,我们将通过一个简单的 Tauri 项目来体验其强大之处。

环境准备

在开始之前,请确保已安装以下工具:

  • Node.js:用于前端开发。

  • Rust 工具链:通过 Rust 官网 安装。

  • Tauri CLI:Tauri 提供的命令行工具。

安装 Tauri CLI:

cargo install tauri-cli

创建 Tauri 项目

  1. 初始化前端项目: 您可以选择使用任何前端框架,这里以 Vite + Vue 为例:

    npm create vite@latest tauri-demo --template vue
    cd tauri-demo
    npm install
  2. 添加 Tauri 模块: 在项目目录下运行以下命令:

    npm install --save-dev @tauri-apps/cli @tauri-apps/api
  3. 初始化 Tauri 项目:

    npx tauri init

    此命令会自动在项目中生成 src-tauri 目录,其中包含 Tauri 的配置文件和后端代码。

配置 Tauri

src-tauri/tauri.conf.json 是 Tauri 的主要配置文件,您可以在其中调整应用程序名称、窗口大小等参数。例如:

{"package": {"productName": "Tauri Demo","version": "0.1.0"},"tauri": {"windows": [{"title": "Tauri 应用","width": 800,"height": 600}]}
}

构建简单的 Tauri 应用

修改前端代码

src/App.vue 中添加一个按钮和事件绑定:

<template><div><h1>欢迎使用 Tauri</h1><button @click="greet">向后端发送请求</button></div>
</template><script>
import { invoke } from '@tauri-apps/api';export default {methods: {async greet() {const response = await invoke('greet', { name: 'Tauri 用户' });alert(response);}}
};
</script>
添加 Rust 后端代码

src-tauri/src/main.rs 中,定义一个简单的后端接口:

#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]use tauri::command;#[command]
fn greet(name: &str) -> String {format!("你好, {}! 这是来自 Rust 后端的消息。", name)
}fn main() {tauri::Builder::default().invoke_handler(tauri::generate_handler![greet]).run(tauri::generate_context!()).expect("failed to run app");
}

运行应用程序

开发模式下启动应用:

npm run tauri dev

此时,您会看到一个桌面应用程序窗口,并且点击按钮时能够弹出由 Rust 后端返回的消息。

打包应用程序

准备将应用程序发布到生产环境时,可以运行以下命令:

npm run tauri build

打包后生成的安装文件位于 src-tauri/target/release/bundle 中。

更高级的功能

Tauri 还支持许多高级功能,包括但不限于:

  1. 文件系统访问:读写本地文件。

  2. 多窗口管理:在应用中创建多个窗口。

  3. 自定义菜单和托盘图标。

  4. 与操作系统交互,如剪贴板操作和通知。

以下是一个访问文件系统的示例:

#[command]
fn read_file(path: &str) -> Result<String, String> {std::fs::read_to_string(path).map_err(|err| err.to_string())
}

您可以通过前端的 invoke 方法调用此接口,并将结果显示在应用中。

对比 Electron

特性TauriElectron
应用体积几 MB数十到几百 MB
内存占用较低较高
安全性Rust 提供内存安全保障无内置保障,依赖开发者
开发语言前端(任意) + Rust前端(任意) + Node.js

结论

Tauri 是构建轻量级桌面应用程序的出色工具,尤其适合需要性能和体积兼顾的场景。它结合了现代 Web 技术与 Rust 的强大能力,为开发者提供了一种高效、可靠的开发体验。如果您正在寻找 Electron 的替代方案,不妨试试 Tauri。

欢迎分享您的开发心得或遇到的问题!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/5286.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

偏序关系.

一、偏序&#xff08;半序&#xff09;关系 偏序关系 自反反对称传递性 二、全序&#xff08;线序、链&#xff09;关系 三、偏序集中的重要元素 1. 极大元与极小元 极大元找所在集合的一个或几个最高点&#xff1b; 极小元找所在集合的一个或几个最低点。 2. 最大元与最小…

国产编辑器EverEdit - 列编辑模式

1 列模式 1.1 应用背景 在编辑CSV格式&#xff0c;或者比较规整的配置文件时&#xff0c;可能会用到一列的内容都要进行修改的情况&#xff0c;在不支持列模式的编辑器中&#xff0c;可能需要用户逐行去编辑&#xff0c;比如有下面一段扯淡文本&#xff1a; ADD NRNFREQ:LOCA…

论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(一)

Understanding Diffusion Models: A Unified Perspective&#xff08;一&#xff09; 文章概括引言&#xff1a;生成模型背景&#xff1a;ELBO、VAE 和分层 VAE证据下界&#xff08;Evidence Lower Bound&#xff09;变分自编码器 &#xff08;Variational Autoencoders&#x…

【重庆市乡镇界】面图层shp格式arcgis数据乡镇名称和编码wgs84坐标无偏移内容测评

标题中的“最新重庆市乡镇界面图层shp格式arcgis数据乡镇名称和编码wgs84坐标无偏移最新”指的是一个地理信息系统&#xff08;GIS&#xff09;的数据集&#xff0c;特别设计用于ArcGIS软件。这个数据集包含了重庆市所有乡镇的边界信息&#xff0c;以Shapefile&#xff08;.shp…

【0x04】HCI_Connection_Request事件详解

目录 一、事件概述 二、事件格式及参数 2.1. HCI_Connection_Request 事件格式 2.2. BD_ADDR 2.3. Class_Of_Device 2.4. Link_Type 三、主机响应 3.1. ACL链接类型 3.2. SCO或eSCO链接类型 四、应用场景 4.1. 设备配对场景 4.2. 蓝牙文件传输场景 4.3. 蓝牙物联网…

9. 神经网络(一.神经元模型)

首先&#xff0c;先看一个简化的生物神经元结构&#xff1a; 生物神经元有多种类型&#xff0c;内部也有复杂的结构&#xff0c;但是可以把单个神经元简化为3部分组成&#xff1a; 树突&#xff1a;一个神经元往往有多个树突&#xff0c;用于接收传入的信息。轴突&#xff1a;…

CTTSHOW-WEB入门-爆破25-28

web25 题目&#xff1a;解题思路及步骤&#xff1a;分析代码&#xff1a; error_reporting(0); include("flag.php");//包含文件flag.php if(isset($_GET[r])){$r $_GET[r];//获取参数rmt_srand(hexdec(substr(md5($flag), 0,8)));$rand intval($r)-intval(mt_ra…

win32汇编环境,对多行编辑框添加或删除文本

;运行效果 ;win32汇编环境,对多行编辑框添加或删除文本 ;主要要先设置文本的开始点与结束点&#xff0c;然后把一段文本顶替上去。没有添加文本或删除文本的概念&#xff0c;只有顶替。如果开始点与结束点都是前面文本的长度值&#xff0c;则成了从后面添加文本的效果。如果结束…

AutoGen入门——快速实现多角色、多用户、多智能体对话系统

1.前言 如https://github.com/microsoft/autogen所述&#xff0c;autogen是一多智能体的框架&#xff0c;属于微软旗下的产品。 依靠AutoGen我们可以快速构建出一个多智能体应用&#xff0c;以满足我们各种业务场景。 本文将以几个示例场景&#xff0c;使用AutoGen快速构建出…

项目中使用的是 FastJSON(com.alibaba:fastjson)JSON库

从你的 pom.xml 文件中可以看到&#xff0c;项目明确依赖了以下 JSON 库&#xff1a; FastJSON&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version> </depende…

EAMM: 通过基于音频的情感感知运动模型实现的一次性情感对话人脸合成

EAMM: 通过基于音频的情感感知运动模型实现的一次性情感对话人脸合成 1所有的材料都可以在EAMM: One-Shot Emotional Talking Face via Audio-Based Emotion-Aware Motion Model网站上找到。 摘要 尽管音频驱动的对话人脸生成技术已取得显著进展&#xff0c;但现有方法要么忽…

cuda从零开始手搓PB神经网络

cuda实现PB神经网络 基于上一篇的矩阵点乘&#xff0c;实现了矩阵的加减乘除、函数调用等。并且复用之前元编程里面写的梯度下降、Adam、NAdam优化方法。实现PB神经网络如下&#xff1a; #ifndef __BP_NETWORK_HPP__ #define __BP_NETWORK_HPP__ #include "matrix.hpp&quo…

【Java数据结构】排序

【Java数据结构】排序 一、排序1.1 排序的概念1.2 排序的稳定性1.3 内部排序和外部排序1.3.1 内部排序1.3.2 外部排序 二、插入排序2.1 直接插入排序2.2 希尔排序 三、选择排序3.1 选择排序3.2 堆排序 四、交换排序4.1 冒泡排序4.2 快速排序Hoare法&#xff1a;挖坑法&#xff…

内存 管理

1、如何在LCD上面实现SD卡文件浏览&#xff1f; 需要读取所有文件名到内存&#xff0c;方法是定义一个数组才存储所有文件名。&#xff08;最大文件名的长度和文件个数&#xff09; 2、内存管理是什么&#xff1f; 指软件运行时对MCU内存资源的分配和使用的技术。要实现两个函…

1月21日星期二今日早报简报微语报早读

1月21日星期二&#xff0c;农历腊月廿二&#xff0c;早报#微语早读。 1、多地官宣&#xff1a;2025年可有序、限时或在限定区域燃放烟花爆竹&#xff1b; 2、TikTok恢复在美服务&#xff1b;特朗普提出继续运营TikTok方案&#xff0c;外交部&#xff1a;若涉及收购中国企业应…

深度学习python基础(第三节) 函数、列表

本节主要介绍函数、列表的基本语法格式。 函数 与c语言的函数差不多&#xff0c;就是语法基本格式不同。 name "loveyou" length len(name) print("字符串的长度为&#xff1a;%d" % length) # 自定义函数 def countstr(data):count 0for i in da…

STM32 FreeROTS Tickless低功耗模式

低功耗模式简介 FreeRTOS 的 Tickless 模式是一种特殊的运行模式&#xff0c;用于最小化系统的时钟中断频率&#xff0c;以降低功耗。在 Tickless 模式下&#xff0c;系统只在有需要时才会启动时钟中断&#xff0c;而在无任务要运行时则完全进入休眠状态&#xff0c;从而降低功…

65,【5】buuctf web [SUCTF 2019]Upload Labs 2

进入靶场 1,源代码 点击题目时有个就有个admin.php <?php // 引入配置文件 include config.php;class Ad{public $cmd;public $clazz;public $func1;public $func2;public $func3;public $instance;public $arg1;public $arg2;public $arg3;// 构造函数&#xff0c;用于初…

Apache Tomcat文件包含漏洞复现(详细教程)

1.漏洞原理 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;其安装后会默认开启ajp连接器&#xff0c;方便与其他web服务器通过ajp协议进行交互。属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发…

springboot基于安卓的智启教育服务平台app

基于Spring Boot的智启教育服务平台App是一个结合了Spring Boot后端框架与安卓前端技术的综合性教育服务平台。 一、技术背景与架构 1.开发语言&#xff1a;后端采用Java语言开发&#xff0c;充分利用Java的跨平台性、面向对象特性和强大的后端处理能力。前端则使用安卓开发技…