Tauri 快速上手

news/2024/12/20 20:15:40/文章来源:https://www.cnblogs.com/SRIGT/p/18619926

0x01 概述

(1)简介

  • 官网链接:https://tauri.app/

    • 中文版:https://tauri.app/zh-cn/
  • Tauri 是一个构建适用于所有主流桌面和移动平台的轻快二进制文件的框架

  • 特点:

    • 安全:基于 Rust 构建,具有内存、线程和类型安全方面的优势
    • 兼容:基于 Web 技术架构,能兼容几乎所有的前端框架
    • 小体积:基于 WebView 渲染,打包后的体积足够小
  • 与 Electron 对比:

    Electron Tauri
    前端引擎 Chromium WebView
    后端集成 通过 NodeJS 的原生模块与第三方库 通过 Rust 语言的系统编程特性
    打包体积 大(主要因为包含了完整的 Chromium 浏览器)
    资源占用

(2)环境配置

以 Windows 11 系统为例

  1. 下载Microsoft C++ 构建工具并安装其中的 “使用 C++ 进行桌面开发”

    • 如果已安装过 Visual Studio 可以通过 Visual Studio Installer 安装
  2. 在 WebView2 Runtime 下载区安装 WebView2

  • WebView 2 已默认安装在 Windows 10(从版本 1803 开始)和更高版本的 Windows 上
  1. 在 Rust 工具下载区根据系统下载 32 位或 64 位的 rustup-init.exe,之后根据官网提示安装并配置 Rust

    • 如果 rustup 内下载速度慢,可以修改系统环境变量,添加以下内容:

      变量
      RUSTUP_DIST_SERVER https://mirrors.aliyun.com/rustup
      RUSTUP_UPDATE_ROOT https://mirrors.aliyun.com/rustup/rustup
    • Rust 编程入门可参考《Rust | 博客园-SRIGT》

  2. 参考《NodeJS 与 Express | 博客园-SRIGT》安装 NodeJS 或使用 NVM 安装

(3)创建项目

a. create-tauri-app(推荐)

  1. 在 PowerShell 中,使用命令 irm https://create.tauri.app/ps | iex 获取 create-tauri-app 脚本并执行

  2. 依次填写或选择以下内容:

    1. 项目名称:tauri-app
    2. 项目 ID:com.tauri-app.app
    3. 前端语言:TypeScript / JavaScript
    4. 包管理器:npm
    5. UI 模板:Vanilla
    6. UI 风格:JavaScript
  3. 依次使用如下命令:

    cd tauri-app # 进入项目目录
    npm install # 安装依赖
    npm run tauri dev # 启动项目
    
    • 在启动项目时,如果发生类似 Expected identifier but found "import" 的报错,则需要使用命令 npm install --save-dev esbuild@0.24.0 解决

      参考自 https://github.com/evanw/esbuild/issues/4010

  4. 启动成功后会弹出一个应用程序

b. Tauri CLI

  1. 使用命令 npm create vite@latest 创建以一个基于 Vite 的应用程序
  2. 依次填写或选择以下内容:
    1. 项目名称:tauri-app
    2. 框架:Vanilla
    3. 变体:JavaScript
  3. 使用命令 cd tauri-app 进入项目目录
  4. 使用命令 npm install --save-dev @tauri-apps/cli@latest 安装 Tauri 脚手架
  5. 使用命令 npx tauri init 运行脚手架工具执行初始化
  6. 依次填写或选择以下内容:
    1. 应用名称:tauri-app
    2. 窗口标题:tauri-app
    3. Web 资源目录:.
    4. 调试服务 URL:http://localhost:5173
    5. 前端调试命令:npm run dev
    6. 前端构建命令:npm run build
  7. 使用命令 npx tauri dev 启动项目

(4)目录说明

  • src:前端源码目录
    • assets:资源目录
  • src-tauri:后端源码目录
    • capabilities:应用的功能和权限目录
    • gen:代码生成目录
      • schemas:数据结构和验证目录
    • icons:图标资源目录
    • src:源码目录
    • target:构建输出目录

0x02 前后端交互

在应用中,按 F12 键可以开启调试工具

(1)前端调用后端

  1. 修改 src-tauri\src\lib.rs

    // 后端提供事件
    #[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::command] 表示其标记的代码可以被前端调用

  2. 修改 src\main.js

    const { invoke } = window.__TAURI__.core; // 作为 Tauri 核心库的一个方法,能够调用后端提供的代码let greetInputEl;
    let greetMsgEl;async function greet() {greetMsgEl.textContent = await invoke("greet", // 后端提供的方法名称(大小写完全一致){ name: greetInputEl.value } // 向后端方法传递参数(通过对象传递,键值与函数参数一一对应));
    }window.addEventListener("DOMContentLoaded", () => {greetInputEl = document.querySelector("#greet-input");greetMsgEl = document.querySelector("#greet-msg");document.querySelector("#greet-form").addEventListener("submit", (e) => {e.preventDefault();greet();});
    });
    

(2)后端调用前端

  1. 修改 src\main.js

    // 添加依赖
    use tauri::{AppHandle, Emitter};#[tauri::command]
    fn greet(name: &str) -> String {format!("Hello, {}! You've been greeted from Rust!", name)
    }// 新增事件
    #[tauri::command]
    fn reply(app: AppHandle, name: &str) {app // 代表前端的一个指针,不必在前端显式传递这个参数.emit( // 用于向前端推送事件"my_event", // 事件名称format!("hello from rust, {}!", name), // 推送数据内容).unwrap() // 用于直接 panic
    }#[cfg_attr(mobile, tauri::mobile_entry_point)]
    pub fn run() {tauri::Builder::default().plugin(tauri_plugin_opener::init()).invoke_handler(tauri::generate_handler![greet, reply]) // 注册事件.run(tauri::generate_context!()).expect("error while running tauri application");
    }
    
  2. 修改 src\main.js

    const { invoke } = window.__TAURI__.core;
    const { listen } = window.__TAURI__.event; // 作为 Tauri 事件库的一个方法,能够监听后端推送的事件let greetInputEl;
    let greetMsgEl;listen( // 监听事件"my_event", // 事件名称(response) => { // 回调函数greetMsgEl.textContent = response.payload;}
    );async function reply() {await invoke("reply", { name: greetInputEl.value });
    }window.addEventListener("DOMContentLoaded", () => {greetInputEl = document.querySelector("#greet-input");greetMsgEl = document.querySelector("#greet-msg");document.querySelector("#greet-form").addEventListener("submit", (e) => {e.preventDefault();reply();});
    });
    

详细调用方法参考官方文档:https://tauri.app/zh-cn/plugin/commands/

0x03 插件

  • 一般使用命令 npm run tauri add [插件名称] 安装指定插件

    • Tauri 官方文档提供的一些插件及其使用方法:https://tauri.app/zh-cn/plugin/
  • 默认情况下,所有插件命令都被阻止,无法访问

    • 如需访问,则必须在 src-tauri\capabilities\default.json 配置中定义一个权限列表
  • 举例:使用文件系统插件

    1. 使用命令 npm run tauri add fs 安装相关插件

    2. 修改 src\main.js,添加文件写入操作

      const { writeFile, BaseDirectory } = window.__TAURI__.fs;let greetInputEl;
      let greetMsgEl;async function write() {const msg = greetInputEl.value; // 获取输入框的值const encoder = new TextEncoder(); // 实例化编码器const data = encoder.encode(msg); // 将字符串编码await writeFile("file.txt", // 文件名data, // 文件内容{ baseDir: BaseDirectory.Desktop } // 文件保存位置(桌面));
      }window.addEventListener("DOMContentLoaded", () => {greetInputEl = document.querySelector("#greet-input");greetMsgEl = document.querySelector("#greet-msg");document.querySelector("#greet-form").addEventListener("submit", (e) => {e.preventDefault();write();});
      });
      
    3. 修改 src-tauri\capabilities\default.json,添加权限

      {// ..."permissions": ["core:default","opener:default","fs:default","fs:scope-desktop","fs:write-all"]
      }
      

      其中:

      • "fs:default":安装插件后默认添加
      • "fs:scope-desktop":添加对桌面操作的权限
      • "fs:write-all":添加所有文件写入权限

0x04 打包

  1. 使用命令 npm run tauri build 对 Tauri 应用打包
    • 打包过程中需要保持连接至 GitHub
    • 如果 wix 下载失败,参考《windows Tauri 构建(Release)时下载 WiX等其它打包文件失败 | 博客园-litesite》
  2. 打包完成后,在 src-tauri\target\release 目录查看打包好的内容

-End-

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

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

相关文章

Linux学习笔记(一) Linux目录结构

下图显示的为Linux中的目录结构:/bin[常用](/usr/bin、/usr/local/bin) 是Binary(二进制)的缩写,这个目录存放着经常使用的命令。 /sbin(/usr/sbin、/usr/local/sbin) s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。 /home[常用] 存放普通用户的家目…

数据库审计与监控

title: 数据库审计与监控 date: 2024/12/20 updated: 2024/12/20 author: cmdragon excerpt: 数据库审计与监控是确保数据库安全性和性能的关键环节。通过实施有效的审计策略,可以追踪用户活动,监控数据访问与修改,从而及时发现潜在的安全威胁和性能瓶颈。探讨数据库审计的基…

Java实现单词的翻译(详解爬虫操作)

JAVA通过Crawler实现英语单词的翻译首先声明一点,这种方法仅限于低频次的交互来获取翻译信息,一旦一秒内大量的请求会被重定向,那就直接不能用了 如果希望可以批量查询英语单词翻译,可以查看我的下一篇博客。接着我们上一讲Java如何用HaspMap统计次数并排序详解 - ivanlee7…

实用工具:Calibre 7.22最新版 一款Window电子书管理工具和阅读器便携版

📢提示:文章排版原因,链接放在文章结尾👇👇,往下翻就行 📢提示:文章排版原因,链接放在文章结尾👇👇,往下翻就行 前言 初识Calibre 最近有几本epub格式的电子书要看发现电脑上没有可以打开的软件,所以最近找到了这个软件。功能 功能亮点电子书管理:Calib…

VS2022 C++QT 中文乱码 设置UTF-8编码

说明 所有内容来源于网络 通过插件调整源文件编码FileEncoding:查看编码 Force UTF-8:用于保存为UTF-8 C++项目设置为utf-8 项目-属性-配置属性-C/C++-命令行-其它选项 中 增加/utf-8、

雷池 WAF 配置了多条人机验证规则,命中规则是怎样的?

优先级说明 频率限制(1 小时) > 自定义规则(1 小时) > 站点 BOT 防护(自定义时长) 配置人机验证的地方 【防护配置-频率限制】限制结果选择【人机验证】【防护配置-自定义规则】规则类型选择【人机验证】【防护站点-站点管理】的【BOT 防护】中开启【人机验证】命中…

如何在C#.NET中使用LINX(arduino的LabView库)

思路:使用LabView的导出为.NET互操作程序集,导出COM给.NET调用在LabView安装HubMaker插件,将预编译固件刷入Arduino设备中。这不是本文的重点,省略 根据需要,编写VI。注意:必须在此处使用全局变量或者其它方法避免LinxResource簇在C#中出现,否则在程序运行时有概率出现堆…

C#.Net NModbus库 简单代码案例(非Nmodbus4库)

在NuGet管理器中搜索NModbus。注意,如果需要使用串口通信需要同时选中相关包

EyeSoothe荣登中国区“健康健美”类第32名! ✨

眼睛疲劳、视力变化、色盲检测、虚拟眼镜试戴……这些问题,EyeSoothe都能帮你解决!作为一款全能眼健康应用,EyeSoothe集成了多个强大功能,旨在帮助你更好地保护视力,缓解眼部疲劳,随时关注眼健康。📱💡 https://apps.apple.com/app/eyesoothe/id6478070048 为什么选择…

腾讯云 AI 代码助手:代码诊断应用实践

代码诊断是指通过分析和检查源代码,发现并定位其中的错误、缺陷或不规范之处。传统的代码诊断方法主要依赖于人工审查和简单的静态分析工具,结合流水线的自动化能力并且结合质量门禁建立不同的质量阈值关卡。基于 AI 赋能代码诊断是在传统的能力基础上在次进行质量左移,通过…

虚拟机下centos7系统实现修改ip地址为固定ip

修改虚拟机配置 目的 如果不修改虚拟机配置,会出现设置了静态IP和相关参数之后,本地局域网可以互相访问,但是CentOS系统访问不了互联网。 步骤一:以管理员身份打开虚拟机 步骤二:打开虚拟网络编辑器 左上角菜单栏找到“编辑”选项并单击,在下拉子菜单中单击选项“虚拟网络…

【每日一题】20241220

事情总是这样。一个人竭尽全力想要置身事外,但忽然有一天,不知道为什么,却发现自己身处某个故事之中,一路奔向结局。【每日一题】 1.(16分) \(\hspace{0.7cm}\)如图,\(ABD\) 为竖直平面内的光滑绝缘轨道,其中 \(AB\) 段是水平的,\(BD\) 段为半径 \(R=0.2 \; \mathrm{m…