1.初识Tauri

文章目录

    • 一、前言
    • 二、基本认识
    • 三、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.mzph.cn/news/687641.shtml

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

相关文章

【PyQt】在PyQt5的界面上集成matplotlib绘制的图像

文章目录 0 前期教程1 概述2 matplotlib2.1 库导入2.2 图片的各个部分解释2.3 代码风格2.4 后端 3 集成matplotlib图像到pyqt界面中3.1 使用到的模块3.2 理解Qt Designer中的“控件提升”3.3 界面与逻辑分离的思路3.4 扩展 0 前期教程 【PyQt】PyQt5进阶——串口上位机及实时数…

transformer-Attention is All You Need(一)

1. 为什么需要transformer 循环模型通常沿输入和输出序列的符号位置进行因子计算。通过在计算期间将位置与步骤对齐,它们根据前一步的隐藏状态和输入产生位置的隐藏状态序列。这种固有的顺序特性阻止了训练样本内的并行化,这在较长的序列长度上变得至关重…

STM32-开发工具

开发过程中可能用到的工具 1、烧录下载调试工具ST-LINK ST-LINK,是ST(意法半导体)推出的调试编程工具,适用于STM32系列芯片的USB接口的下载及在线仿真器。 2、串口调试工具/串口下载工具 串口调试工具是一种用于通过串口通信协议与目标设备进行数据交…

源码网打包,目前有3000多个资源

源码网打包,目前有3000多个资源 需要赶快下手吧,到手可以使用,搭建好和本站一样,全网唯一 优化缩略图演示:https://www.htm.ink默认缩略图演示:https://blog.htm.ink网站截图

const--类的常量成员函数

在C中,为了禁止成员函数修改数据成员的值,可以将它设置为常量成员函数。设置常量成员函数的方法是在函数原型的后面加上const,形式如下: class x { …………… T f(t1,t2) const{} ………… }; 常量成员函数的作用: 将成员函数设置为const,表明该成员函…

FMEA的六大分类——SunFMEA软件

FMEA是一种预防性的质量工具,通过对产品设计或过程的故障模式进行分析,评估其可能产生的影响,从而采取相应的措施来降低产品的故障风险。根据分析的范围和目的,FMEA可以分为以下几种类型,今天sun fmea软件系统和大家一…

理解孟子思想,传承中华文化

为了更好地了解和传承中华文化,加深对孟子思想的认识与理解,探究孟子思想在现代社会的传承与发展,2024年2月18日,曲阜师范大学计算机学院“古韵新声,格物致‘知’”实践队队员崔本迪在山东省泰安市东平县进行了深入的调…

vue-路由(六)

阅读文章你可以收获什么? 1 明白什么是单页应用 2 知道vue中的路由是什么 3 知道如何使用vueRouter这个路由插件 4 知道如何如何封装路由组件 5 知道vue中的声明式导航router-link的用法 6 知道vue中的编程式导航的使用 7 知道声明式导航和编程式导航式如何传…

代码随想录算法训练营第33天| Leetcode1005.K次取反后最大化的数组和、134. 加油站、135. 分发糖果

文章目录 Leetcode 1005.K次取反后最大化的数组和Leetcode 134. 加油站Leetcode 135. 分发糖果 Leetcode 1005.K次取反后最大化的数组和 题目链接:Leetcode 1005.K次取反后最大化的数组和 题目描述: 给你一个整数数组 nums 和一个整数 k ,按…

根据三维点坐标使用matplotlib绘制路径轨迹

需求:有一些点的三维坐标(x,y,z),需要绘制阿基米德螺旋线轨迹图。 points.txt 0.500002, -0.199996, 0.299998 0.500545, -0.199855, 0.299338 0.501112, -0.199688, 0.298704 0.501701, -0.199497, 0.298…

在Linux系统中设置HTTP隧道以实现网络穿透和端口转发

在数字化世界中,网络穿透和端口转发成为了许多开发者和系统管理员必备的技能。而在Linux系统中,通过设置HTTP隧道,我们可以轻松实现这一目标,让我们的服务即便在内网环境中也能被外部世界所访问。 那么,如何在Linux系…

一文搞懂设计模式—观察者模式

本文已收录至Github,推荐阅读 👉 Java随想录 微信公众号:Java随想录 文章目录 使用场景实现方式Java对观察者模式的支持Guava对观察者模式的支持Spring对观察者模式的支持 优缺点 观察者模式(Observer Pattern)是一种…

小型洗衣机哪个牌子质量好?小型洗衣机十大排名

清洗内衣内裤这些贴身衣物确实是一件比较头疼的事,有的小伙子由于工作的劳累通常在洗完澡后并不喜欢直接清洗内衣内裤,会存上几天再扔到洗衣机里,这样做是很不可取的,因为穿过的内裤很久不洗就会滋生细菌,另外&#xf…

Java使用Documents4j实现Word转PDF(知识点+案例)

文章目录 前言源码获取一、认识Documents4j二、快速集成2.1、pom.xml依赖2.2、word转PDF实现项目目录WordUtils.javaDemo6.java测试效果 参考文章资料获取 前言 博主介绍:✌目前全网粉丝2W,csdn博客专家、Java领域优质创作者,博客之星、阿里…

Linux-系统资源管理的命令

目录 查看CPU:more /proc/meminfo 查看内存数据:free -m / free -h 查看系统版本:more /etc/issue 查看操作系统的类型:uname -a 查看主机名称:hostname 查看磁盘空间:df -h 查看某个目录空间…

【解决(几乎)任何机器学习问题】:处理分类变量篇(上篇)

这篇文章相当长,您可以添加至收藏夹,以便在后续有空时候悠闲地阅读。 本章因太长所以分为上下篇来上传,请敬请期待 很多⼈在处理分类变量时都会遇到很多困难,因此这值得⽤整整⼀章的篇幅来讨论。在本章中,我将 讲述不同…

快速搞懂时间序列数据平稳检验

在对时间序列数据进行分析预测时,平稳时间序列数据预测效果更好。所以首先要检测数据是否平稳,没有趋势的时间序列数据,我们称为平稳的,即随着时间的推移,表现出恒定的方差,具有恒定的自相关结构。本文介绍…

Linux 虚拟机在线热扩容分区

介绍 本教程是用于Linux虚拟机在调整虚拟硬盘大小后,进行在线不重启热扩容分区大小。 适用于RHEL 7以上的版本及衍生发行版。(如Centos、Rocky Linux、Alma Linux等) 硬盘分区在线热扩容 刷新硬盘容量 echo 1 > /sys/block/sda/device…

GIS利用不舒适指数绘制地区的生物气候舒适度图

生物气候舒适度定义了最适宜的气候条件,在这种条件下,人们感到健康和充满活力。生物气候舒适度地图对城市规划研究特别有用。温度、相对湿度和风速等要素对评估生物气候舒适度非常重要。[1] 人们已经得出了许多不同的指数来确定生物气候舒适度。在本博文中,我们将使用广泛使…

Elcomsoft 取证工具包系列:Advanced Office Password Recovery

天津鸿萌科贸发展有限公司是 Elcomsoft 系列软件授权代理商。 Advanced Office Password Recovery 是 Elcomsoft 取证工具包中的密码破解软件之一。它可以恢复、删除或规避使用各种 Office 套件创建的文档的密码。可以对 WordPerfect,Lotus,OpenOffice&…