1.初识Tauri

news2024/11/24 15:46:52

文章目录

    • 一、前言
    • 二、基本认识
    • 三、js与rust通信
    • 四、构建应用


一、前言

原文以及后续文章可点击查看:初识Tauri。

Tauri是一款比较新的跨平台桌面框架,也是我目前最喜欢的一个框架,其官网为:Tauri

它的作用其实和Electron很像:使用Web前端技术开发桌面软件。

但不同之处在于,Electron是可以通过纯粹前端技术进行开发,也就是你只需要懂htmljscss,就可以使用它来开发软件了。

Tauri则不同,除了这些基础的,你还需要懂rust这门开发语言才行,所有js不支持的本地功能,你都可以使用rust来自行扩展。

虽然这看上去比electron更麻烦了,就开发体验来说,我觉得tauri比electron要好得多,你几乎不需要任何其它配置就可以直接进行开发使用、并且只要你熟悉rust语言,就能非常方便的任意扩展本地功能集。

如果想要在electron框架中自定义扩展本地功能集,你大概率是需要写C++代码、然后再将两者进行绑定的,相比之下electron可能还更麻烦一点。

虽然tauri在开发本地应用的体验上比electron要好上不少,但缺点也是显而易见的:

  1. 你需要学会使用rust语言,这提升了开发者的使用门槛。
  2. tauri出现的较晚,各种文档、资料目前都较少,这进一步提高了门槛。
  3. tauri跨平台兼容性较差,这是它生成的可执行文件只有几兆的根本原因:它使用了是系统自带的webview。

但不管怎么说,时代始终是在向前发展的,我相信未来这些问题都会被相继解决的。

学习tauri开发应用还有一个很重要的因素:tauri还将支持移动端开发,而electron只支持PC端开发。

也就是说,将来tauri可能真的能实现一套代码、全平台运行,而且使用的还是前端的技术,相比于另一个目前积极开发、试图一套代码全平台运行、但目前依旧生态薄弱的flutter,我甚至觉得tauri会更加有前景。

二、基本认识

官方教程一般都是对有一定经验的开发者所写的,所以基本不可能用大白话去写教材,这也就导致新手其实是很难段时间看懂的。

进入tauri主页后,你基本就只需要关注左上角的两个菜单:

image-20240202094001621

第一个是官方写的入门教材文档、用于前期的学习。

而第二个这是tauri中各种配置、可用api,用于后期快速查阅。

本文首先来看看第一个,点进去后可以看到下图所示的内容:

image-20240202094347121

首先第一个是准备开发环境,然后第二个是如何快速使用各种前端技术框架在tauri中构建本地应用。

这里我就不挨着按官方文档来了,简单来说你想要使用tauri框架,你就得先安装好rust开发环境,没有安装的可以参考文章:初识rust

如果你目前是正常安装的windows10及之后的电脑,那么默认就已经安装了WebView2,不用理会,否则,你需要自行安装该组件:Microsoft Edge WebView2。

这个组件就是tauri在windows平台所利用的本地浏览器功能,因为tauri直接调用的它,而不是像electron中那样会直接将整个浏览器的核心功能打包进最终的安装包内,所以能使得它的体积非常小巧。

所以网上才会有这样的说法:每安装一个使用electron开发的程序,都相当于在你的电脑上多安装了一个浏览器。

至于linux、mac平台,过程是差不多的,可以自行探索。

为了能让大家能够更加清楚的认识到tauri框架是如何工作的,这里我将从零搭建一个tauri的基本开发环境,这里的前提时你对rust语言比较熟悉。

从后面开发,我将直接使用vue3进行开发,如果你对vue3不熟悉,可以参考文章:vue初识。

tauri自带了一个命令行工具,名字为tauri-cli,我们需要先用rust中的cargo工具将其安装:

cargo install tauri-cli

注意:该步骤仅针对想要了解tauri框架是如何工作、并原因自己亲手实践的人,如果你仅仅只是想要见识一些,那么这一步并不是必要的。

因为后文我们会直接使用前端的npm工具进行管理、tauri官方已经推出了现成的框架可以让我们直接使用,正常开发项目中不需要用到这里安装的tauri-cli

安装完成后,我可以任意新建一个文件夹,比如我新建的文件夹名为test,然后在该文件内使用tauri-cli提供的命令来初始化一个rust项目:

cargo tauri init

然后会让你选择项目配置:

image-20240202102101028

最后最后两个用不着,要删除默认值留空白后按Enter,只需要填前面四个选项:

  1. 应用名
  2. 窗口标题
  3. 前端代码位置
  4. 服务器启动的位置

后两个位置一定要相同,并且一般都是rust代码的上一级目录,所以前面要添加../

然后下一步我们就可以创建一个src文件夹了,也就是上面所填的,并在其中创建一个index.html文件作为我们的主窗口所使用的前端页面:

image-20240202102921355

然后从命令行进入src-tauri文件夹,运行命令cargo tauri dev启动应用:

image-20240202103104355

等待其编译完毕,就可以看到窗口成功的被启动了。

三、js与rust通信

仅仅像上面这样启动起来还是不够的,前端都是使用js代码写的,而现在后端我们使用的则是rust代码。

为了能扩展js本地功能,我们就需要让js调用rust代码。

想要实现这一点,需要执行下面三个步骤:

首先是在tauri的配置文件中启动js调用rust代码的能力:

image-20240202103512044

只要将该配置项写上即可:"withGlobalTauri": true

然后第二步,在rust代码中注册想要被js代码使用的函数:

image-20240202103855063

正常写rust中的函数即可,唯一需要注意的是,如果你想要你的函数被js调用,那么必须在前面添加一个宏:#[tauri::command]

写了函数后还需要注册,注册的方式就是在main函数中调用invoke_handler函数,该函数的参数由tauri::generate_handler!这个官方提供的宏来产生。

这个宏可接收的是一个数组,其中的所有元素都是使用了#[tauri::command]的函数,你只需要将函数名挨个填入进去即可注册函数成功。

然后来到第三步,就是js代码中调用该函数:

image-20240202104502398

首先从tauri挂载的全局对象tauri中取出其提供的invoke函数:

const { invoke } = window.__TAURI__.tauri

然后使用该函数来调用我们前面在rust中注册的函数:

    invoke('hello_tauri', { name: 'World' });

它的第一个参数是函数名,第二个参数就是函数的参数对象,因为前面我函数中写的参数名为name,所以这里的对象{}中存放的就也是一个name键对应其值为"world"

由于它返回的是一个promise对象,想要取出其值可以用await,但这里不是在异步函数中,所以无法使用,只能暂时使用该对象上的then函数得到返回值:

invoke('hello_tauri', { name: 'World' })
    .then((response) => {
        console.log(response)
    });

此时运行程序,按F12打开控制台,就能看到调用成功、成功得到了rust函数的返回值:

image-20240202105030444

上面是js代码调用rust函数的过程,rust同样也是可以调用js代码的,只不过得需要依靠“事件”,这个后文我会提及,因为纯js代码没有类型提示写起来还是太过难受了。

四、构建应用

开发完毕后,我们需要将其构建为可执行文件分发给其它人使用。

那么首先第一步,你需要修改本项目的标识符:

image-20240202110451186

这个标识符可以任意,不过一般为本项目的名字,或者类似这样的路径com.test,和java中包的路径很像。

然后你就可以运行命令:

cargo tauri build

首次构建的话,这个过程会比较漫长,慢慢等待即可:

image-20240202110657130

构建完成后,它还会自动帮我们生成安装包,不过这个需要你有“梯子”去下载相应的工具,否则会失败,但这并不影响软件的正常使用:

image-20240202111247808

比如我这里第一个msi类型的安装包就构建成功了,并且显示出来了路径,但第二个nist安装包就构建失败了。

这些在你前期学习都无所谓的,不愿管,直接来到目录src-tauri\target\release中,可以看到项目同名的可执行文件,双击它即可运行:

image-20240202111500737

并且直接将其发给其它人也是能够直接使用的,但要注意,如果对方电脑上没有安装WebView2,那么就运行不起来,需要先下载的WebView2

但这并不需要你担心,刚才提到的那个安装包会自动对用户环境进行检测,如果发现目标计算机上没有安装,那么它会自动引导用户去安装。

所以真正分发应用的时候,还是建议你分发它构建好的安装包:

image-20240202111751917

至于如何配置它,我会在后面的文章对其进行详细介绍。

原文以及后续文章可点击查看:初识Tauri。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能学习与实训笔记(十四):Langchain之Agent

人工智能专栏文章汇总:人工智能学习专栏文章汇总-CSDN博客 本篇目录 0、概要 1、Agent整体架构 2、langchain中agent实现 3、Agent业务实现逻辑 0、概要 Agent是干什么的? Agent的核心思想是使用语言模型(LLM)作为推理的大脑…

VitePress-17- 配置- appearance 的作用详解

作用说明 appearance : 是进行主题模式的配置开关,决定了是否启用深色模式。 可选的配置值: true: 默认配置,可以切换为深色模式; false: 禁用主题切换,只使用默认的配置; dark: 默认使用深色模式&#xff…

【Linux网络编程六】服务器守护进程化Daemon

【Linux网络编程六】服务器守护进程化Daemon 一.背景知识:前台与后台二.相关操作三.Linux的进程间关系四.自成会话五.守护进程四步骤六.服务器守护进程化 一.背景知识:前台与后台 核心知识就是一个用户在启动Linux时,都会给一个session会话&a…

基于Springboot的社区物资交易互助平台(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的社区物资交易互助平台(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系…

leetcode刷题(罗马数字转数字)

1.题目描述 2.解题思路 这时候已经给出了字母对应的数字,我们只需要声明一个字典,将罗马数字和数字之间的对应关系声明即可。其中可能涉及到会出现两个连续的罗马字母代表一个数字,这时候我们需要判断遍历的字符和将要遍历的下一个字符是否存…

pytorch 实现线性回归(深度学习)

一 查看原始函数 初始化 %matplotlib inline import random import torch from d2l import torch as d2l 1.1 生成原始数据 def synthetic_data(w, b, num_examples):x torch.normal(0, 1, (num_examples, len(w)))y torch.matmul(x, w) bprint(x:, x)print(y:, y)y tor…

Mysql第二关之存储引擎

简介 所有关于Mysql数据库优化的介绍仿佛都有存储引擎的身影。本文介绍Mysql常用的有MyISAM存储引擎和Innodb存储引擎,还有常见的索引。 Mysql有两种常见的存储引擎,MyISAM和Innodb,它们各有优劣,经过多次优化和迭代,…

【STM32 CubeMX】SPI HAL库编程

文章目录 前言一、CubeMX配置SPI Flash二、SPI HAL编程2.1 查询方式函数2.2 使用中断方式2.3 DMA方式 总结 前言 STM32 CubeMX 是一款由 STMicroelectronics 提供的图形化配置工具,用于生成 STM32 微控制器的初始化代码和项目框架。在 STM32 开发中,使用…

JDBC查询操作

目录 加载驱动获取连接创建会话发送SQL处理结果关闭资源测试 加载驱动 // 加载驱动Class.forName("com.mysql.cj.jdbc.Driver");获取连接 // 获取连接String url "jdbc:mysql://127.0.0.1:3306/book";String username "root" …

2024全新领域,适合新手发展的渠道,年后不愁资金问题!

我是电商珠珠 如今年已经过完了,不少人还在迷茫自己开工后要做些什么,部分人还在想着去做一些不用吃力就能赚钱的工作,或是一份能兼顾自己日常生活的兼职。 其实,任何赚钱的工作要么动脑要么费力。 费力的工作有很多&#xff0…

敦煌网怎么提升流量的?如何进行自养号测评提升转化率?

敦煌网作为中国领先的跨境电商平台,对于商家而言,提升流量是增加曝光和销售的重要手段。以下将介绍敦煌网提升流量的几种方法。 一、敦煌网怎么提升流量的? 首先,通过合理的商品定位和市场调研,选择有潜力和竞争优势的商品进行…

android获取sha1

1.cmd在控制台获取 切换到Android Studio\jre\bin目录下执行keytool -list -v -keystore 签名文件路径例如: 2.也可以在android studio中获取 在Terminal中输入命令:keytool -list -v -keystore 签名文件路径获取 获取到的sha1如下:

linux系统zabbix工具监控web页面

web页面监控 内建key介绍浏览器配置浏览器页面查看方式 监控指定的站点的资源下载速度,及页面响应时间,还有响应代码; web Scenario: web场景(站点)web page :web页面,一个场景有多…

【LeetCode: 103. 二叉树的锯齿形层序遍历 + BFS】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

OpenAl 视频生成模型 —— Sora技术报告解读

这里是陌小北,一个正在研究硅基生命的碳基生命。正在努力成为写代码的里面背诗最多的,背诗的里面最会写段子的,写段子的里面代码写得最好的…厨子。 写在前面 早上醒来,就看到OpenAl推出的视频模型Sora炸锅了,感觉所…

WordPress站点成功升级后的介绍页地址是什么?

我们一般在WordPress站点后台 >> 仪表盘 >> 更新中成功升级WordPress的话,最后打开的就是升级之后的版本介绍页。比如boke112百科前两天升级到WordPress 6.4.2后显示的介绍页如下图所示: 该介绍除了介绍当前版本修复了多少个问题及修补了多少…

BUUCTF第十九、二十题解题思路

目录 第十九题rome 第二十题rsa 第十九题rome 解压、查壳。 无壳,用32位IDA打开,检索字符串,找到一个字符串“You are correct!”,与flag相关,对其交叉引用找到函数,查看伪代码。 int func() {int resul…

二叉树前序中序后序遍历(非递归)

大家好,又和大家见面啦!今天我们一起去看一下二叉树的前序中序后序的遍历,相信这个对大家来说是信手拈来,但是,今天我们并不是使用常见的递归方式来解题,我们采用迭代方式解答。我们先看第一道前序遍历 1…

LabVIEW开发DUP实时监控系统

LabVIEW开发DUP实时监控系统 该项目采用虚拟仪器设计理念,以LabVIEW作为核心技术平台,开发了一套磁控溅射过程的实时监控系统。实现过程中关键参数的全面数据采集与处理,建立完整的历史数据库,以支持涂层技术的改进和系统向模糊控…

英文论文(sci)解读复现【NO.20】TPH-YOLOv5++:增强捕获无人机的目标检测跨层不对称变压器的场景

此前出了目标检测算法改进专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读发表高水平学术期刊中的 SCI论文&a…