使用Tauri和Angular创建桌面应用程序
1. 前言
Tauri 是一个应用程序构建工具包,可让您使用 Web 技术为所有主要桌面操作系统构建软件。核心库是用 Rust 编写的,用户界面几乎可以使用任何前端框架编写。它包括一个可选的、tree-shakeable JavaScript API用于舒适地访问底层操作系统、一个具有签名和验证的桌面二进制捆绑器、一个让您的用户保持最新版本的安全更新程序、一个可扩展的插件系统以及支持与操作系统整合,例如通知和应用程序托盘。
Tauri 使用简单且易于扩展。对于 Rust 编程语言的新手,Tauri 提供了一个舒适的学习环境,将与您一起成长。安装 Rust 后,创建您的第一个应用程序只需运行create-tauri-app. 但如果您希望保持 100% Rust 的安全性和舒适性,那么您根本不必使用 Node.js。
我们为注重安全、尊重隐私和具有环保意识的软件工程社区构建 Tauri
Tauri的设计哲学: 我们为注重安全、尊重隐私和具有环保意识的软件工程社区构建Tauri.
2. 预先准备
首先您需要安装 Rust 及其他系统依赖。安装Rust环境可以参考鹏叔的技术博客 - Windows上安装Rust
3. 创建一个tauri功能
1 |
|
这里的npm create实际是npm init的别名, tauri-app是一个initializer 对应的npm包为create-tauri-app, 关于npm create的详细讲解请参考鹏叔的技术博客 - npm create命令详解
1 | C:\code>npm create tauri-app |
输入应用名称
选择前端语言
选择包管理工具
选择UI template, 正如标题所说, 本文主要讲述使用Tauri和Angular创建桌面应用程序, 所以这里我选择Angular
初始化完成后, 项目的目录结构如下:
1 | $tree -I "node_modules" -L 2 |
4. 编译运行
项目创建成功后, 进入项目根目录, 安装依赖.
1 |
|
启动程序
1 |
|
执行以上命令, 如果没有严重错误, 一个桌面应用程序将会自动打开.
第一次运行此命令时,Rust包管理器需要几分钟的时间来下载和构建所有必需的包。由于它们是缓存的,所以后续的构建要快得多,因为只有您的代码需要重新构建。
Rust构建完成后,会打webview显示您的应用程序。你可以对你的应用程序进行更改,如果应用程序已经打开,webview应该像浏览器一样自动更新。当你对Rust文件进行更改时,它们会自动重建,你的应用程序也会自动重新启动。
5. 构建应用
Tauri Bundler 是一个 Rust 工具,用于编译二进制文件、打包资产并准备最终捆绑包。 它会检测你当前的操作系统并相应地构建一个包。目前支持:
- Windows: .msi
- macOS: .app, .dmg
- Linux: .deb, .appimage
1 |
|
如果未修改 src-tauri/tauri.conf.json 中的 identifier 直接 build 会报以下错误。想要正确构建,只需修改为自己特有的标识符即可,如 com.myapp.dev。构建完成后,在 src-tauri/target/release/bundle/{platform}/{app} 下就可以找到应用程序安装包。参考问题排查问题4
了解更多不同平台打包注意事项:Tauri Building
6. 如何debug tauri前端程序
在开发阶段,可以使用如下命令,编译并允许Tauri应用,应用会自动打开, 右键菜单会出现inspect选项,点击inspect就能调出devtools程序。
1 |
|
或者,打包时加上debug选项如下:
1 |
|
使用如上命令打包的安装包是带有debug功能的, 安装软件后打开应用, 右键菜单会出现inspect选项,点击inspect就能调出devtools程序。
7. 问题排查
问题1: 在执行npm run tauri dev
时, 超时
1 | √ Compiled successfully. |
原因是: cargo需要远程下载以下crate超时, 需正确配置cargo使用国内镜像, 超时原因你懂的. 关注我的博客首页可以获得解决办法.
问题2: 在执行npm run tauri build
, nsis-3.zip下载不了
解决办法:
手动下载nsis-3.zip, 将加压后的文件夹nsis-3.08文件夹重命名为NSIS, 放到C:\Users<UserName>\AppData\Local\tauri目录下.
问题3: 在执行npm run tauri build, 无法下载NSIS-ApplicationID.zip
1 | Error failed to bundle project: `https://github.com/tauri-apps/binary-releases/releases/download/nsis-plugins-v0/NSIS-ApplicationID.zip: Connection Failed: Connect error: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 (os error 10060)` |
解决办法:
手动下载 NSIS-ApplicationID.zip, 将解压后的文件放到NSIS\Plugins
并将NSIS\Plugins\ReleaseUnicode\ApplicationID.dll复制到NSIS\Plugins\x86-unicode\ApplicationID.dll
将nsis_tauri_utils.dll 复制到NSIS\Plugins\x86-unicode\nsis_tauri_utils.dll
问题4: 当执行npm run tauri build
报如下错误
1 | Error You must change the bundle identifier in `tauri.conf.json > tauri > bundle > identifier`. The default value `com.tauri.dev` is not allowed as it must be unique across applications. |
原因: 默认生成的bundle identifier不是唯一的很容易跟其它应用冲突
问题5: 使用_setup.exe二进制安装包安装的应用程序报错: “由于找不到WebView2Loader.dll, 重新安装此程序可能会解决问题.”
问题分析: 同一个打包过程, 打出的msi安装包没有此问题, 但是在_setup.exe中该文件缺失. 将WebView2Loader.dll手动拷贝到应用程序同级的目录下, 在执行应用程序, 错误消失.
查看了官方文档, nsis配置文件是可以定制的, 需要添加与打包msi格式相同的一段代码, 拷贝.cargo\registry\src\github.com-1ecc6299db9ec823\webview2-com-sys-0.19.0\x64\WebView2Loader.dll
dll文件到 可能的解决办法可以是自定义nsis
另外还有一种办法是将WebView2Loader.dll作为额外的资源文件添加到安装包中, 参考Embedding Additional Files.
8. 关联阅读
创建gitlab pipeline打包Tauri跨平台应用程序
Tauri Mobile-使用JavaScript和Rust开发移动应用程序
9. 相关文章
本文原文位于使用Tauri和Angular创建桌面应用程序, 欢迎访问原文以获得最近更新.
更多Angular相关文章请访问Angular合集 | 鹏叔的技术博客
10. 参考文档
使用Tauri和Angular创建桌面应用程序