升级自 Tauri 1.0
本指南将会指导你将基于 Tauri 1.0 的应用程序升级到 Tauri 2.0。
准备移动端开发
Tauri 的移动端界面要求你的项目输出链接库(shared library)。 如果你的现有应用程序以支持移动端为目标,则必须更改你的 crate 类型,以便在生成桌面端可执行文件的同时也生成链接库。
- 添加下列配置到你的 Cargo 配置文件以生成链接库。
-
重命名
src-tauri/src/main.rs
为src-tauri/src/lib.rs
。这一文件同时被桌面端和移动端共享。 -
将
lib.rs
(重命名自main.rs
)中的main
函数头修改为:
tauri::mobile_entry_point
宏会在编译为移动端库时处理你的入口函数。
- 重新创建
main.rs
并调用刚刚创建的共享的run
函数:
自动迁移
Tauri v2 的命令行工具包括一个 migrate
命令,可自动执行大部分流程,并帮助你完成迁移:
在命令行界面参考中了解有关 migrate
命令的更多信息。
变化摘要
以下是 Tauri 1.0 到 Tauri 2.0 的变化摘要:
Tauri 配置
package > productName
和package > version
被移动到顶层字段。package
被移除。tauri
键被重命名为app
。tauri > allowlist
被移除,详情参考迁移授权许可。tauri > allowlist > protocol > assetScope
被移动到app > security > assetProtocol > scope
。tauri > cli
被移动到plugins > cli
。tauri > windows > fileDropEnabled
被重命名为app > windows > dragDropEnabled
。tauri > updater > active
被移除。tauri > updater > dialog
被移除。tauri > updater
被移动到plugins > updater
。tauri > systemTray
被重命名为app > trayIcon
。tauri > pattern
被移动到app > security > pattern
。tauri > bundle
被移动到顶层。tauri > bundle > dmg
被移动到bundle > macOS > dmg
。tauri > bundle > deb
被移动到bundle > linux > deb
。tauri > bundle > appimage
被移动到bundle > linux > appimage
。tauri > bundle > macOS > license
被移除,使用bundle > licenseFile
作为替代。tauri > bundle > windows > wix > license
被移除,使用bundle > licenseFile
作为替代。tauri > bundle > windows > nsis > license
被移除, 使用bundle > licenseFile
作为替代。build > withGlobalTauri
被移动到app > withGlobalTauri
。build > distDir
被重命名为frontendDist
。build > devPath
被重命名为devUrl
。
全新的 Cargo 功能
- linux-protocol-body:启用自定义协议请求体解析,并允许 IPC 使用它。需要 webkit2gtk 2.40。
移除/修改的 Cargo 功能
- reqwest-client:reqwest 现在是唯一受支持的客户端。
- reqwest-native-tls-vendored:使用
native-tls-vendored
作为替代。 - process-command-api:使用
shell
插件作为替代(见下节说明)。 - shell-open-api:使用
shell
插件作为替代(见下节说明)。 - windows7-compat:被移动到
notification
插件。 - updater:updater 现在是一个插件。
- linux-protocol-headers:现在默认启动,因为我们更新了最低 webkit2gtk 版本支持。
- system-tray:重命名为
tray-icon
。
Rust Crate 变化
api
模块被移除。每个 API 模块都可以在 Tauri 插件中找到。api::dialog
模块被移除。使用tauri-plugin-dialog
作为替代。迁移api::file
模块被移除。使用 Rust 的std::fs
作为替代。api::http
模块被移除。使用tauri-plugin-http
作为替代。迁移api::ip
模块被重写并被移动到tauri::ipc
。查看新的应用程序接口,特别是tauri::ipc::Channel
。api::path
模块中的函数和tauri::PathResolved
被移动到tauri::Manager::path
。迁移api::process::Command
、tauri::api::shell
和tauri::Manager::shell_scope
API 被移除。使用tauri-plugin-shell
作为替代。迁移api::process::current_binary
和tauri::api::process::restart
被移动到tauri::process
。api::version
module has been 被移除。使用 semver crate 作为替代。App::clipboard_manager
和AppHandle::clipboard_manager
被移除。使用tauri-plugin-clipboard
作为替代。迁移App::get_cli_matches
被移除。使用tauri-plugin-cli
作为替代。迁移App::global_shortcut_manager
和AppHandle::global_shortcut_manager
被移除。使用tauri-plugin-global-shortcut
作为替代。迁移Manager::fs_scope
被移除。文件系统范围可通过tauri_plugin_fs::FsExt
访问。Plugin::PluginApi
现在会接收一个插件的配置作为第二个参数。Plugin::setup_with_config
被移除。使用更新后的tauri::Plugin::PluginApi
作为替代。scope::ipc::RemoteDomainAccessScope::enable_tauri_api
和scope::ipc::RemoteDomainAccessScope::enables_tauri_api
被移除。通过scope::ipc::RemoteDomainAccessScope::add_plugin
单独启用每个核心插件。scope::IpcScope
被移除。使用scope::ipc::Scope
作为替代。scope::FsScope
、scope::GlobPattern
和scope::FsScopeEvent
被移除。分别使用scope::fs::Scope
、scope::fs::Pattern
和scope::fs::Event
作为替代。updater
模块被移除。使用tauri-plugin-updater
作为替代。迁移Env.args
字段被移除。使用Env.args_os
字段作为替代。Menu
、MenuEvent
、CustomMenuItem
、Submenu
、WindowMenuEvent
、MenuItem
和Builder::on_menu_event
API 被移除。迁移SystemTray
、SystemTrayHandle
、SystemTrayMenu
、SystemTrayMenuItemHandle
、SystemTraySubmenu
、MenuEntry
和SystemTrayMenuItem
API 被移除。迁移
JavaScript API 变化
@tauri-apps/api
包不再提供非核心模块。只有先前的 tauri
(现在的 core
)、path
、event
和 window
模块被导出。
其他的模块被分离移至插件中。
@tauri-apps/api/tauri
模块被重命名为@tauri-apps/api/core
。迁移@tauri-apps/api/cli
模块被移除。使用@tauri-apps/plugin-cli
作为替代。迁移@tauri-apps/api/clipboard
模块被移除。使用@tauri-apps/plugin-clipboard
作为替代。迁移@tauri-apps/api/dialog
模块被移除。使用@tauri-apps/plugin-dialog
作为替代。迁移@tauri-apps/api/fs
模块被移除。使用@tauri-apps/plugin-fs
作为替代。迁移@tauri-apps/api/global-shortcut
模块被移除。使用@tauri-apps/plugin-global-shortcut
作为替代。迁移@tauri-apps/api/http
模块被移除。使用@tauri-apps/plugin-http
作为替代。迁移@tauri-apps/api/os
模块被移除。使用@tauri-apps/plugin-os
作为替代。迁移@tauri-apps/api/notification
模块被移除。使用@tauri-apps/plugin-notification
作为替代。迁移@tauri-apps/api/process
模块被移除。使用@tauri-apps/plugin-process
作为替代。迁移@tauri-apps/api/shell
模块被移除。使用@tauri-apps/plugin-shell
作为替代。迁移@tauri-apps/api/updater
模块被移除。使用@tauri-apps/plugin-updater
作为替代。迁移@tauri-apps/api/window
模块被重命名为@tauri-apps/api/webviewWindow
。迁移
环境变量变化
Tauri 命令行工具读取和写入的大部分环境变量都重新命名,以保持一致性并防止出错:
TAURI_PRIVATE_KEY
->TAURI_SIGNING_PRIVATE_KEY
TAURI_KEY_PASSWORD
->TAURI_SIGNING_PRIVATE_KEY_PASSWORD
TAURI_SKIP_DEVSERVER_CHECK
->TAURI_CLI_NO_DEV_SERVER_WAIT
TAURI_DEV_SERVER_PORT
->TAURI_CLI_PORT
TAURI_PATH_DEPTH
->TAURI_CLI_CONFIG_DEPTH
TAURI_FIPS_COMPLIANT
->TAURI_BUNDLER_WIX_FIPS_COMPLIANT
TAURI_DEV_WATCHER_IGNORE_FILE
->TAURI_CLI_WATCHER_IGNORE_FILENAME
TAURI_TRAY
->TAURI_LINUX_AYATANA_APPINDICATOR
TAURI_APPLE_DEVELOPMENT_TEAM
->APPLE_DEVELOPMENT_TEAM
TAURI_PLATFORM
->TAURI_ENV_PLATFORM
TAURI_ARCH
->TAURI_ENV_ARCH
TAURI_FAMILY
->TAURI_ENV_FAMILY
TAURI_PLATFORM_VERSION
->TAURI_ENV_PLATFORM_VERSION
TAURI_PLATFORM_TYPE
->TAURI_ENV_PLATFORM_TYPE
TAURI_DEBUG
->TAURI_ENV_DEBUG
事件系统
事件系统经过重新设计,更易于使用。现在,它不再依赖于事件源,而是依赖于事件目标,实现起来更加简单。
emit
函数现在会向所有事件侦听器发送事件。- 添加一个新的
emit_to
函数以向特定目标触发事件。 emit_filter
现在基于EventTarget
进行过滤,而不是基于一个视窗。- 将
listen_global
重命名为listen_any
。现在,它可以监听所有事件,无论其过滤器和目标是什么。
多 webview 支持
Tauri v2 引入了多 webview 支持,目前处在 unstable
feature 标识之后。
为了支持这一功能,我们将 Rust 的 Window
类型重命名为 WebviewWindow
、Manager
的 get_window
函数重命名为 get_webview_window
。
WebviewWindow
JS API 类型现在是从 @tauri-apps/api/webviewWindow
中重导出,而不是从 @tauri-apps/api/window
中。
具体迁移步骤
将 Tauri 1.0 应用程序迁移到 Tauri 2.0 时可能遇到的常见情况。
迁移到 core
模块
@tauri-apps/api/tauri
模块被重命名为 @tauri-apps/api/core
。
只需要修改你的导入路径:
迁移到命令行工具插件
Rust 的 App::get_cli_matches
和 JavaScript 的 @tauri-apps/api/cli
API 被移除。使用 @tauri-apps/plugin-cli
插件作为替代:
- 添加 Cargo 依赖项:
- 在 JavaScript 或 Rust 项目中使用:
迁移到剪贴板插件
Rust 的 App::clipboard_manager
和 AppHandle::clipboard_manager
以及 JavaScript 的 @tauri-apps/api/clipboard
API 被移除。使用 @tauri-apps/plugin-clipboard-manager
插件作为替代:
迁移到对话窗插件
Rust 的 tauri::api::dialog
和 JavaScript 的 @tauri-apps/api/dialog
API 被移除。使用 @tauri-apps/plugin-dialog
插件作为替代:
- 添加 Cargo 依赖项:
- 在 JavaScript 或 Rust 项目中使用:
迁移到文件系统插件
Rust 的 App::get_cli_matches
和 JavaScript 的 @tauri-apps/api/fs
API 被移除。使用 Rust 的 std::fs
或 JavaScript 的 @tauri-apps/plugin-fs
插件作为替代:
- 添加 Cargo 依赖项:
- 在 JavaScript 或 Rust 项目中使用:
一些函数和类型被重命名或移除:
Dir
enum alias 被移除。使用BaseDirectory
。FileEntry
、FsBinaryFileOption
、FsDirOptions
、FsOptions
、FsTextFileOption
和BinaryFileContents
接口和类型别名被移除,并被与每个对应的函数相匹配的接口取代。createDir
被重命名为mkdir
。readBinaryFile
被重命名为readFile
。removeDir
被移除并被remove
取代。removeFile
被移除并被remove
取代。renameFile
被移除并被rename
取代。writeBinaryFile
被重命名为writeFile
。
使用 Rust std::fs
中的函数。
迁移到全局快捷方式插件
Rust 的 App::global_shortcut_manager
和 AppHandle::global_shortcut_manager
以及 JavaScript 的 @tauri-apps/api/global-shortcut
API 被移除。使用 @tauri-apps/plugin-global-shortcut
插件作为替代:
- 添加 Cargo 依赖项:
- 在 JavaScript 或 Rust 项目中使用:
迁移到 HTTP 插件
Rust 的 tauri::api::http
和 JavaScript 的 @tauri-apps/api/http
API 被移除。使用 @tauri-apps/plugin-http
插件作为替代:
- 添加 Cargo 依赖项:
- 在 JavaScript 或 Rust 项目中使用:
HTTP 插件重导出了 reqwest。所以你可以查阅它的文档以获取更多信息。
迁移到提示信息插件
Rust 的 tauri::api::notification
和 JavaScript 的 @tauri-apps/api/notification
API 被移除。使用 @tauri-apps/plugin-notification
插件作为替代:
- 添加 Cargo 依赖项:
- 在 JavaScript 或 Rust 项目中使用:
迁移到 menu
模块
Rust 的 Menu
API 被移动到 tauri::menu
模块,并使用 muda crate 重构。
使用 tauri::menu::MenuBuilder
使用 tauri::menu::MenuBuilder
以替换 tauri::Menu
。
注意到它的构造器接收一个 Manager
实例(App
、AppHandle
或 WebviewWindow
中的一个)作为入参:
使用 tauri::menu::PredefinedMenuItem
使用 tauri::menu::PredefinedMenuItem
以替换 tauri::MenuItem
:
使用 tauri::menu::MenuItemBuilder
使用 tauri::menu::MenuItemBuilder
以替换 tauri::CustomMenuItem
:
使用 tauri::menu::SubmenuBuilder
使用 tauri::menu::SubmenuBuilder
以替换 tauri::Submenu
:
tauri::Builder::menu
现在接收一个闭包,因为菜单需要一个 Manager
实例来构造。参考相关文档以获取更多信息。
菜单事件
Rust 的 tauri::Builder::on_menu_event
API 被移除。使用 tauri::App::on_menu_event
或 tauri::AppHandle::on_menu_event
作为替代:
请注意,有两种方法可以检查哪个菜单项被选中:将项目移至事件处理程序闭包并比较 ID,或通过 with_id
构造函数为项目定义自定义 ID,并使用该 ID 字符串进行比较。
迁移到操作系统插件
Rust 的 tauri::api::os
和 JavaScript 的 @tauri-apps/api/os
API 被移除。使用 @tauri-apps/plugin-os
插件作为替代:
- 添加 Cargo 依赖项:
- 在 JavaScript 或 Rust 项目中使用:
迁移到进程插件
Rust 的 tauri::api::process
和 JavaScript 的 @tauri-apps/api/process
API 被移除。使用 @tauri-apps/plugin-process
插件作为替代:
- 添加到 Cargo 依赖项:
- 在 JavaScript 或 Rust 项目中使用:
迁移到 Shell 插件
Rust 的 tauri::api::shell
和 JavaScript 的 @tauri-apps/api/shell
API 被移除。使用 @tauri-apps/plugin-shell
插件作为替代:
- 添加 Cargo 依赖项:
- 在 JavaScript 或 Rust 项目中使用:
- 打开一个 URL:
- 生成子进程并获取状态码:
- 生成子进程并捕获其输出:
- 生成一个子进程并异步读取其事件:
迁移到托盘图标模块
Rust 的 SystemTray
API 被重命名为 TrayIcon
以确保一致性。新的 API 可以在 Rust 的 tray
模块中找到。
使用 tauri::tray::TrayIconBuilder
使用 tauri::tray::TrayIconBuilder
以替换 tauri::SystemTray
:
查阅 TrayIconBuilder
以获取更多信息。
迁移到托盘菜单
使用 tauri::menu::Menu
以替换 tauri::SystemTrayMenu
、tauri::menu::Submenu
以替换 tauri::SystemTraySubmenu
和 tauri::menu::PredefinedMenuItem
以替换 tauri::SystemTrayMenuItem
。
托盘事件
tauri::SystemTray::on_event
被分割为 tauri::tray::TrayIconBuilder::on_menu_event
和 tauri::tray::TrayIconBuilder::on_tray_icon_event
:
迁移到更新插件
内置的自动更新的提示窗被移除。作为代替,使用 Rust 和 JS API 以检查和安装更新。
Rust 的 tauri::updater
和 JavaScript 的 @tauri-apps/api-updater
API 被移除。
使用 @tauri-apps/plugin-updater
设置一个自定义的更新器:
- 添加 Cargo 依赖项:
- 在 JavaScript 或 Rust 项目中使用:
检查更新:
设置自定义更新目标:
迁移 Path
到 Tauri Manager
Rust 的 tauri::api::path
模块的函数和 tauri::PathResolver
被移动到 tauri::Manager::path
:
迁移到新的窗口 API
在 Rust 侧,Window
被重命名为 WebviewWindow
,它的构建器 WindowBuilder
被重命名为 WebviewWindowBuilder
。
另外,Manager::get_window
函数被重命名为 get_webview_window
,窗口的 parent_window
API 被重命名为 parent_raw
以支持高级窗口父 API。
在 JavaScript 侧,WebviewWindow
类现在从 @tauri-apps/api/webviewWindow
中重导出。
onMenuClicked
函数已被移除。你可以在 JavaScript 中创建菜单时拦截菜单事件。
迁移嵌入的附加文件 (Resources)
在 JavaScript 侧,请确保迁移到文件系统插件。
此外,请注意迁移授权许可中对 v1 的授权许可列表所作的更改。
在 Rust 侧,请确保将 Path 迁移到 Tauri Manager.
迁移嵌入的外部二进制文档 (Sidecar)
在 Tauri v1 中,外部的二进制文件和其参数在许可列表中被定义。而在 v2 中,使用了新的权限系统。有关详细信息,请阅读迁移授权许可。
在 JavaScript 侧,请确保迁移到 Shell 插件.
在 Rust 侧,tauri::api::process
API 已经被移除,使用 tauri_plugin_shell::ShellExt
和 tauri_plugin_shell::process::CommandEvent
作为替代。嵌入的外部二进制文档将指导你如何迁移。
在 v2 中移除了 “process-command-api” 特性。因此,运行外部的二进制文件不需要再在 Tauri 配置文件中配置。
迁移授权许可
授权许可列表 v1 已被重写为一个全新的权限系统,可用于单个插件,并可为多窗口和远程 URL 支持进行更多配置。 这个新系统的工作原理类似于访问控制列表(ACL),你可以允许或拒绝命令、将权限分配给一组特定的窗口和域,并定义访问范围。
要为应用程序启用权限,您必须在 src-tauri/capabilities
文件夹内创建许可配置文件,随后 Tauri 会自动为您配置其他一切。
migrate
命令行工具命令会自动解析你的授权许可列表 v1 并生成相关的许可配置文件。
要了解有关权限和功能的更多信息,请参阅安全文档。
© 2024 Tauri Contributors. CC-BY / MIT