草庐IT

Tauri初步使用

Blacol 2023-10-10 原文

Tauri

是一款替代Electron的产品。如果使用Electron的话就知道Electron打包体积很大,而Tauri打包体积很小。(当然,Tauri的功能不仅是打包)

Tauri的安装

前提条件

  1. 已经安装NodeJS
  2. 已经安装npm
    (NPM和NodeJS的安装方法请见百度)

安装

  1. 下载Visual Studio 2019/2022(2013以上的版本就可以)
    Visual Studio 2022下载地址:https://visualstudio.microsoft.com/zh-hans/vs/
  2. 下载完成后打开vs安装器勾选下面图片中的内容


    组件安装
  3. 等待安装完毕
  4. 下载Rust
    Rust下载地址(注意系统位数):https://www.rust-lang.org/zh-CN/tools/install
  5. Rust下载完毕后双击exe安装,全程直接默认即可,等待安装完毕。
  6. Win10及以下系统需要注意
    tauri需要WebView2才可以运行而Win10及以下并不会自带WebView2,因此需手动安装(如果你安装了一些软件可能会自动安装WebView2,那么这个时候安装程序会提示已经安装WebView2,此时这一步就可以跳过了):
    WebView2安装(选择常青版引导程序即可):https://developer.microsoft.com/zh-cn/microsoft-edge/webview2/
  7. 在cmd中执行cargo install tauri-bundler,如果下载失败,执行cargo install tauri-bundler --force。(下载速度特慢,建议上网查找cargo的国内镜像源及配置方法)

至此,Tauri已经安装完毕。

Tauri和Vue结合

  1. 添加插件tauri-cli:
    (需要进入到项目中使用这个命令)
    vue add tauri
    
    等待添加完成
  2. 添加完成后,会让你一次输入项目名,窗口名等信息,可以先一律默认然后自己修改。等待tauri初始化完毕。重启编译器(如:Webstorm)
  3. 执行npm install --save-dev @tauri-apps/cli
  4. 打开package.json,将scripts下面的"tauri:build": "vue-cli-service tauri:build"改成"tauri:build": "tauri build""tauri:serve": "vue-cli-service tauri:serve"改成"tauri:serve": "tauri dev"
  5. 打开项目路径/src-tauri/tauri.conf.json文件,将
    "build": {
    "beforeBuildCommand": "",
    "beforeDevCommand": "",
    "devPath": "http://localhost:8080",
    "distDir": "../dist"
    }
    
    改成
    "build": {
    "beforeBuildCommand": "npm run build",
    "beforeDevCommand": "npm run serve",
    "devPath": "http://localhost:[项目的端口号]",
    "distDir": "../dist"
    }
    
    (不改会打包错误)
    "identifier": "com.tauri.dev"改成"identifier": "com.tauri.build"(不改会打出空包)
  6. 此时Vue和Tauri整合完毕,可以使用Vue作为前端,Tauri进行打包。

通过tauri:serve进行运行操作。
第一次打包速度会非常慢,但以后打包就很快了。
(如果运行失败可以执行这个命令试试,若无法解决可以看下面的踩坑)

后续动作

修改项目信息

项目信息配置文件就是前文提到的tauri.conf.json。这里面记载了项目的一些信息,打包时也会使用这个配置文件。因此,可以在这里对项目的打包做一些配置。

修改msi安装包的语言

默认打包出来的msi是英语的,如果要改成其他语言可以尝试下列方法:

  1. tauri.conf.json中的tauri->bundle->windows下添加"wix":{"language": ["en-US","zh-CN"]}
  2. 重新打包,这样就会生成2个安装包,一个英语,一个简中。所支持的语言代码见下面的链接:https://docs.microsoft.com/en-us/windows/win32/msi/localizing-the-error-and-actiontext-tables

踩坑

  1. tauri:serve无法运行或者运行一段时间后自动结束并报错,提示找不到命令'cargo'
    (1). 如果你已经安装了cargo且系统cmd当中可以使用cargo而在使用编译器运行的时候就出现这个问题
    解决:重启你的编译器(比如Webstorm必须彻底关闭并重启)
    (2). 如果你没有安装cargo ,请安装cargo(安装Rust时自动安装)
  2. 打包时出错,在下载WixTool时报错。
    第一次打包的话会下载一个组件包,因为网络问题可能无法下载导致打包失败,可以自己手动下载(速度很快)然后放到C:\User\你的用户名\AppData\Local\tauri\WixTools目录下,如果没有tauri和WixTools文件夹就创建创建这两个文件夹,(AppData文件夹需要开启“显示隐藏文件”才能看到)需要注意,文件夹的名称是固定的,不能修改!!!
    WixTools下载(复制到浏览器可以直接下载,或者将它复制然后粘贴到迅雷下载):https://github.com/wixtoolset/wix3/releases/download/wix3112rtm/wix311-binaries.zip
  3. 【2022-8-4更新】使用js中的confirm函数弹出的对话框在tauri打包后无效(“弹出确认框就跳转页面”、“弹出确认框无论点什么都是按照‘确认’处理”等问题都属于这种情况)
    Tauri有一套自己对于confirm的实现逻辑(不知道是vue插件tauri-cli导致的还是tauri本身就有一套特殊的机制,本人猜测是vue插件tauri-cli的可能性更大),原先JS的confirm函数返回的是Bool而使用tauri打包后confirm返回的是一个对象,你需要实现then方法才可以让confirm发挥应有的作用。
    举例:
    未使用tauri时的代码:
    let b=confirm("确定删除吗?")
    if(b){
      ...//当用户点击确认后执行的代码
    }
    
    使用tauri后就需要这样写:
    let b=confirm("确定删除吗?")
    b.then((res)=>{
      if(res){
        //当用户点击确认后执行的代码
      }else{
        //当用户点击取消后执行的代码
      }
    })
    
    目前不清楚其他框(alert等)的逻辑是否也变了。

评价

从这次经历看来,Tauri和Vue的集成并不是很好,而且和vue的整合有些繁琐,不过做为新起之秀还是值得期待的,因为Tauri打包的体积非常小,我有一个项目用Electron打包是120MB(安装包),用tauri打包就变成7MB(安装包)了,非常的nice。
但它有这么几个缺点:

  1. 打包时会占用大量的CPU(开一个Idea,运行后台,再开一个Webstorm,然后webstorm开始打包,此时你的电脑卡的跟动画片一样)
  2. 和Vue的集成十分繁琐
  3. 生态不够完善
  4. API文档比较混乱(尤其是“配置文件结构”那部分,特别混乱)

有关Tauri初步使用的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 使用 RubyZip 生成 ZIP 文件时设置压缩级别 - 2

    我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看ruby​​zip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d

  3. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  4. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  5. ruby - 在 Ruby 中使用匿名模块 - 2

    假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于

  6. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  7. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  8. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  9. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  10. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

随机推荐