跳转到内容
Tauri

从 Tauri 1.0 升级

本指南将向您展示如何将您的Tauri 1.0应用程序升级到Tauri 2.0。

为移动设备做准备

Tauri的移动界面要求您的项目输出一个共享库。如果您现有应用程序的目标是移动设备,您必须更改您的框架以生成这种类型的工件,同时包含桌面可执行文件。

  1. 更改Cargo清单以生成库。追加以下块
src-tauri/Cargo.toml
[lib]
name = "app_lib"
crate-type = ["staticlib", "cdylib", "rlib"]
  1. src-tauri/src/main.rs 重命名为 src-tauri/src/lib.rs。该文件将由桌面和移动目标共享。

  2. lib.rs 中的 main 函数头重命名为以下

src-tauri/src/lib.rs
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
// your code here
}

tauri::mobile_entry_point 宏使您的函数准备好在移动设备上执行。

  1. 重新创建 main.rs 文件,调用共享运行函数
src-tauri/src/main.rs
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
fn main() {
app_lib::run();
}

自动迁移

Tauri v2 CLI包括一个 migrate 命令,可以自动化大多数流程并帮助您完成迁移

npm install @tauri-apps/cli@latest
npm run tauri migrate

命令行界面参考中了解更多关于 migrate 命令的信息

变更总结

以下是Tauri 1.0到Tauri 2.0变更的摘要

Tauri配置

  • package > productNamepackage > version 被移动到了顶层对象。
  • 二进制文件名称不再自动重命名为匹配 productName,因此您必须向顶层对象添加一个匹配 productNamemainBinaryName 字符串。
  • 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
  • bundle > createUpdaterArtifacts 已添加,在使用应用程序更新时必须设置。
    • 当从已分发版本的 v1 应用程序升级时,将其设置为 v1Compatible。有关更多信息,请参阅更新器指南
  • tauri > systemTray 已更名为 app > trayIcon
  • tauri > pattern 已经移动到 app > security > pattern
  • tauri > bundle 已经移动到顶级。
  • tauri > bundle > identifier 已经移动到顶级对象。
  • 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 代替。
  • tauri > bundle > windows > webviewFixedRuntimePath 已移除,请使用 bundle > windows > webviewInstallMode 代替。
  • build > withGlobalTauri 已经移动到 app > withGlobalTauri
  • build > distDir 已更名为 frontendDist
  • build > devPath 已更名为 devUrl

Tauri 2.0 配置 API 参考文档

新的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: 更新程序现在是一个插件。
  • linux-protocol-headers: 由于我们已经升级了我们的最小 webkit2gtk 版本,现在默认启用。
  • system-tray: 已更名为 tray-icon

Rust框架变更

  • api 模块已移除。每个 API 模块都可以在 Tauri 插件中找到。
  • api::dialog 模块已移除。请使用 tauri-plugin-dialog 代替。 迁移
  • api::file 模块已移除。请使用 Rust 的 std::fs 代替。
  • api::http 模块已移除。请使用 tauri-plugin-http 代替。 迁移
  • api::ip 模块已重写并移动到 tauri::ipc。查看新的 API,特别是 tauri::ipc::Channel
  • api::path 模块函数和 tauri::PathResolved 已移动到 tauri::Manager::path迁移
  • api::process::Commandtauri::api::shelltauri::Manager::shell_scope API 已移除。请使用 tauri-plugin-shell 代替。 迁移
  • api::process::current_binarytauri::api::process::restart 已移动到 tauri::process
  • api::version 模块已被移除。请使用 semver crate 代替。
  • 移除了 App::clipboard_managerAppHandle::clipboard_manager。请使用 tauri-plugin-clipboard 代替。迁移说明
  • 移除了 App::get_cli_matches。请使用 tauri-plugin-cli 代替。迁移说明
  • 移除了 App::global_shortcut_managerAppHandle::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_apiscope::ipc::RemoteDomainAccessScope::enables_tauri_api。请通过 scope::ipc::RemoteDomainAccessScope::add_plugin 逐个启用核心插件。
  • 移除了 scope::IpcScope,请使用 scope::ipc::Scope 代替。
  • 移除了 scope::FsScopescope::GlobPatternscope::FsScopeEvent,请分别使用 scope::fs::Scopescope::fs::Patternscope::fs::Event
  • 移除了 updater 模块。请使用 tauri-plugin-updater 代替。迁移说明
  • Env.args 字段已被移除,请使用 Env.args_os 字段代替。
  • 移除了 MenuMenuEventCustomMenuItemSubmenuWindowMenuEventMenuItemBuilder::on_menu_event API。迁移说明
  • 移除了 SystemTraySystemTrayHandleSystemTrayMenuSystemTrayMenuItemHandleSystemTraySubmenuMenuEntrySystemTrayMenuItem API。迁移说明

JavaScript API变更

@tauri-apps/api 软件包不再提供非核心模块。仅导出之前的 tauri(现在 core)、patheventwindow 模块。所有其他模块已移至插件。

  • @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迁移说明

v1 插件现在以 @tauri-apps/plugin-<plugin-name> 的形式发布。之前它们可以从 git 作为 tauri-plugin-<plugin-name>-api 获取。

环境变量变更

为了保持一致性和防止错误,Tauri CLI 读取和写入的大多数环境变量都被重命名了。

  • 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_SERVER_PORT -> TAURI_CLI_PORT
  • 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 而不是窗口进行过滤。

多个webview支持

重命名了 listen_globallisten_any。现在它将监听所有事件,无论它们的过滤器或目标。

Tauri v2 引入了多webview支持,目前此功能处于 不稳定 状态。为了支持它,我们将 Rust 中的 Window 类型重命名为 WebviewWindow,并将 Manager 中的 get_window 函数重命名为 get_webview_window

在Windows上使用新的源URL

WebviewWindow JS API 类型现在从 @tauri-apps/api/webviewWindow 重新导出,而不是从 @tauri-apps/api/window

详细迁移步骤

当您将 Tauri 1.0 应用程序迁移到 Tauri 2.0 时可能会遇到的常见场景。

迁移到核心模块

@tauri-apps/api/tauri 模块被重命名为 @tauri-apps/api/core。只需重命名模块导入即可。

import { invoke } from "@tauri-apps/api/tauri"
import { invoke } from "@tauri-apps/api/core"

迁移到CLI插件

Rust 中的 App::get_cli_matches JavaScript @tauri-apps/api/cli API 已被删除。使用 @tauri-apps/plugin-cli 插件代替。

  1. 添加到 cargo 依赖项
Cargo.toml
[dependencies]
tauri-plugin-cli = "2"
  1. 在 JavaScript 或 Rust 项目中使用
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_cli::init())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-cli": "^2.0.0"
}
}
import { getMatches } from '@tauri-apps/plugin-cli';
const matches = await getMatches();

迁移到剪贴板插件

已移除Rust App::clipboard_managerAppHandle::clipboard_manager 以及JavaScript @tauri-apps/api/clipboard API。请使用 @tauri-apps/plugin-clipboard-manager 插件代替。

[dependencies]
tauri-plugin-clipboard-manager = "2"
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_clipboard_manager::init())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-clipboard-manager": "^2.0.0"
}
}
import { writeText, readText } from '@tauri-apps/plugin-clipboard-manager';
await writeText('Tauri is awesome!');
assert(await readText(), 'Tauri is awesome!');

迁移到对话框插件

已移除Rust tauri::api::dialog 和 JavaScript @tauri-apps/api/dialog API。请使用 @tauri-apps/plugin-dialog 插件代替。

  1. 添加到 cargo 依赖项
Cargo.toml
[dependencies]
tauri-plugin-dialog = "2"
  1. 在 JavaScript 或 Rust 项目中使用
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_dialog::init())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-dialog": "^2.0.0"
}
}
import { save } from '@tauri-apps/plugin-dialog';
const filePath = await save({
filters: [
{
name: 'Image',
extensions: ['png', 'jpeg'],
},
],
});

迁移到文件系统插件

已移除Rust App::get_cli_matches 和 JavaScript @tauri-apps/api/fs API。请使用Rust的 std::fs 和JavaScript的 @tauri-apps/plugin-fs 插件代替。

  1. 添加到 cargo 依赖项
Cargo.toml
[dependencies]
tauri-plugin-fs = "2"
  1. 在 JavaScript 或 Rust 项目中使用
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_fs::init())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-fs": "^2.0.0"
}
}
import { mkdir, BaseDirectory } from '@tauri-apps/plugin-fs';
await mkdir('db', { baseDir: BaseDirectory.AppLocalData });

一些函数和类型已被重命名或移除。

  • 移除了枚举别名 Dir,请使用 BaseDirectory.
  • 移除了接口和类型别名 FileEntryFsBinaryFileOptionFsDirOptionsFsOptionsFsTextFileOptionBinaryFileContents,并将它们替换为适用于每个功能的新接口。
  • createDir 重命名为 mkdir
  • readBinaryFile 重命名为 readFile
  • 移除了 removeDir 并将其替换为 remove
  • 移除了 removeFile 并将其替换为 remove
  • 移除了 renameFile 并将其替换为 rename
  • writeBinaryFile 重命名为 writeFile

迁移到全局快捷键插件

已移除Rust的 App::global_shortcut_managerAppHandle::global_shortcut_manager 以及JavaScript的 @tauri-apps/api/global-shortcut API。请使用 @tauri-apps/plugin-global-shortcut 插件代替。

  1. 添加到 cargo 依赖项
Cargo.toml
[dependencies]
[target."cfg(not(any(target_os = \"android\", target_os = \"ios\")))".dependencies]
tauri-plugin-global-shortcut = "2"
  1. 在 JavaScript 或 Rust 项目中使用
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_global_shortcut::Builder::default().build())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-global-shortcut": "^2.0.0"
}
}
import { register } from '@tauri-apps/plugin-global-shortcut';
await register('CommandOrControl+Shift+C', () => {
console.log('Shortcut triggered');
});

迁移到HTTP插件

已移除Rust的 tauri::api::http 和JavaScript的 @tauri-apps/api/http API。请使用 @tauri-apps/plugin-http 插件代替。

  1. 添加到 cargo 依赖项
Cargo.toml
[dependencies]
tauri-plugin-http = "2"
  1. 在 JavaScript 或 Rust 项目中使用
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_http::init())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-http": "^2.0.0"
}
}
import { fetch } from '@tauri-apps/plugin-http';
const response = await fetch(
'https://raw.githubusercontent.com/tauri-apps/tauri/dev/package.json'
);

迁移到通知插件

已移除Rust的 tauri::api::notification 和JavaScript的 @tauri-apps/api/notification API。请使用 @tauri-apps/plugin-notification 插件代替。

  1. 添加到 cargo 依赖项
Cargo.toml
[dependencies]
tauri-plugin-notification = "2"
  1. 在 JavaScript 或 Rust 项目中使用
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_notification::init())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-notification": "^2.0.0"
}
}
import { sendNotification } from '@tauri-apps/plugin-notification';
sendNotification('Tauri is awesome!');

迁移到菜单模块

Rust的 Menu API已移动到 tauri::menu 模块,并重构为使用 muda crate

请使用 tauri::menu::MenuBuilder

请使用 tauri::menu::MenuBuilder 代替 tauri::Menu。请注意,它的构造函数需要一个Manager实例(一个AppAppHandleWebviewWindow的实例)作为参数。

use tauri::menu::MenuBuilder;
tauri::Builder::default()
.setup(|app| {
let menu = MenuBuilder::new(app)
.copy()
.paste()
.separator()
.undo()
.redo()
.text("open-url", "Open URL")
.check("toggle", "Toggle")
.icon("show-app", "Show App", app.default_window_icon().cloned().unwrap())
.build()?;
Ok(())
})

请使用 tauri::menu::PredefinedMenuItem

请使用 tauri::menu::PredefinedMenuItem 代替 tauri::MenuItem

use tauri::menu::{MenuBuilder, PredefinedMenuItem};
tauri::Builder::default()
.setup(|app| {
let menu = MenuBuilder::new(app).item(&PredefinedMenuItem::copy(app)?).build()?;
Ok(())
})

请使用 tauri::menu::MenuItemBuilder

请使用 tauri::menu::MenuItemBuilder 代替 tauri::CustomMenuItem

use tauri::menu::MenuItemBuilder;
tauri::Builder::default()
.setup(|app| {
let toggle = MenuItemBuilder::new("Toggle").accelerator("Ctrl+Shift+T").build(app)?;
Ok(())
})

请使用 tauri::menu::SubmenuBuilder

请使用 tauri::menu::SubmenuBuilder 代替 tauri::Submenu

use tauri::menu::{MenuBuilder, SubmenuBuilder};
tauri::Builder::default()
.setup(|app| {
let submenu = SubmenuBuilder::new(app, "Sub")
.text("Tauri")
.separator()
.check("Is Awesome")
.build()?;
let menu = MenuBuilder::new(app).item(&submenu).build()?;
Ok(())
})

tauri::Builder::menu 现在接受一个闭包,因为菜单需要Manager实例才能构建。请参阅文档以获取更多信息。

已移除Rust的 tauri::Builder::on_menu_event API。请使用 tauri::App::on_menu_eventtauri::AppHandle::on_menu_event 代替。

use tauri::menu::{CheckMenuItemBuilder, MenuBuilder, MenuItemBuilder};
tauri::Builder::default()
.setup(|app| {
let toggle = MenuItemBuilder::with_id("toggle", "Toggle").build(app)?;
let check = CheckMenuItemBuilder::new("Mark").build(app)?;
let menu = MenuBuilder::new(app).items(&[&toggle, &check]).build()?;
app.set_menu(menu)?;
app.on_menu_event(move |app, event| {
if event.id() == check.id() {
println!("`check` triggered, do something! is checked? {}", check.is_checked().unwrap());
} else if event.id() == "toggle" {
println!("toggle triggered!");
}
});
Ok(())
})

请注意,有两种方式可以检查哪个菜单项被选中:将项移到事件处理闭包中并比较ID,或通过 with_id 构造函数为项定义一个自定义ID,并使用该ID字符串进行比较。

迁移到OS插件

已移除 Rust tauri::api::os 和 JavaScript @tauri-apps/api/os API。请使用 @tauri-apps/plugin-os 插件。

  1. 添加到 cargo 依赖项
Cargo.toml
[dependencies]
tauri-plugin-os = "2"
  1. 在 JavaScript 或 Rust 项目中使用
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_os::init())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-os": "^2.0.0"
}
}
import { arch } from '@tauri-apps/plugin-os';
const architecture = await arch();

迁移到进程插件

已移除 Rust tauri::api::process 和 JavaScript @tauri-apps/api/process API。请使用 @tauri-apps/plugin-process 插件。

  1. 添加到 cargo 依赖项
Cargo.toml
[dependencies]
tauri-plugin-process = "2"
  1. 在 JavaScript 或 Rust 项目中使用
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_process::init())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-process": "^2.0.0"
}
}
import { exit, relaunch } from '@tauri-apps/plugin-process';
await exit(0);
await relaunch();

迁移到Shell插件

已移除 Rust tauri::api::shell 和 JavaScript @tauri-apps/api/shell API。请使用 @tauri-apps/plugin-shell 插件。

  1. 添加到 cargo 依赖项
Cargo.toml
[dependencies]
tauri-plugin-shell = "2"
  1. 在 JavaScript 或 Rust 项目中使用
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_shell::init())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-shell": "^2.0.0"
}
}
import { Command, open } from '@tauri-apps/plugin-shell';
const output = await Command.create('echo', 'message').execute();
await open('https://github.com/tauri-apps/tauri');

迁移到托盘图标模块

Rust 的 SystemTray API 已更名为 TrayIcon,以保持一致性。新的 API 可以在 Rust 的 tray 模块中找到。

使用 tauri::tray::TrayIconBuilder

使用 tauri::tray::TrayIconBuilder 而不是 tauri::SystemTray

let tray = tauri::tray::TrayIconBuilder::with_id("my-tray").build(app)?;

更多信息请见 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_eventtauri::tray::TrayIconBuilder::on_tray_icon_event

use tauri::{
menu::{MenuBuilder, MenuItemBuilder},
tray::{MouseButton, MouseButtonState, TrayIconBuilder, TrayIconEvent},
};
tauri::Builder::default()
.setup(|app| {
let toggle = MenuItemBuilder::with_id("toggle", "Toggle").build(app)?;
let menu = MenuBuilder::new(app).items(&[&toggle]).build()?;
let tray = TrayIconBuilder::new()
.menu(&menu)
.on_menu_event(move |app, event| match event.id().as_ref() {
"toggle" => {
println!("toggle clicked");
}
_ => (),
})
.on_tray_icon_event(|tray, event| {
if let TrayIconEvent::Click {
button: MouseButton::Left,
button_state: MouseButtonState::Up,
..
} = event
{
let app = tray.app_handle();
if let Some(webview_window) = app.get_webview_window("main") {
let _ = webview_window.show();
let _ = webview_window.set_focus();
}
}
})
.build(app)?;
Ok(())
})

迁移到更新器插件

已移除带自动更新检查的内置对话框,请使用 Rust 和 JS API 来检查和安装更新。

已移除 Rust 的 tauri::updater 和 JavaScript 的 @tauri-apps/api-updater API。要使用 @tauri-apps/plugin-updater 设置自定义更新目标。

  1. 添加到 cargo 依赖项
[dependencies]
tauri-plugin-updater = "2"
  1. 在 JavaScript 或 Rust 项目中使用
fn main() {
tauri::Builder::default()
.plugin(tauri_plugin_updater::Builder::new().build())
}
package.json
{
"dependencies": {
"@tauri-apps/plugin-updater": "^2.0.0"
}
}
import { check } from '@tauri-apps/plugin-updater';
import { relaunch } from '@tauri-apps/plugin-process';
const update = await check();
if (update?.available) {
console.log(`Update to ${update.version} available! Date: ${update.date}`);
console.log(`Release notes: ${update.body}`);
await update.downloadAndInstall();
// requires the `process` plugin
await relaunch();
}

迁移路径到Tauri管理器

Rust 的 tauri::api::path 模块函数和 tauri::PathResolver 已移动到 tauri::Manager::path

use tauri::{path::BaseDirectory, Manager};
tauri::Builder::default()
.setup(|app| {
let home_dir_path = app.path().home_dir().expect("failed to get home dir");
let path = app.path().resolve("path/to/something", BaseDirectory::Config)?;
Ok(())
})

迁移到新的窗口API

在 Rust 方面,Window 已更名为 WebviewWindow,其构建器 WindowBuilder 现在命名为 WebviewWindowBuilder,而 WindowUrl 现在命名为 WebviewUrl

此外,Manager::get_window 函数已重命名为 get_webview_window,窗口的 parent_window API 已重命名为 parent_raw,以支持高级窗口父级 API。

在 JavaScript 方面,WebviewWindow 类现在导出到 @tauri-apps/api/webviewWindow 路径。

已移除 onMenuClicked 函数,您可以在 JavaScript 中创建菜单时拦截菜单事件。

迁移嵌入的额外文件(资源)

在 JavaScript 方面,请确保您已 迁移到文件系统插件。此外,请注意在 迁移权限 中所做的更改。

在 Rust 方面,请确保您已 迁移路径到 Tauri Manager

迁移嵌入的外部二进制文件(侧车)

在 Tauri v1 中,外部二进制文件及其参数在 allowlist 中定义。在 v2 中,请使用新的权限系统。更多信息请见 迁移权限

在 JavaScript 方面,请确保您已 迁移到 Shell 插件

在 Rust 方面,tauri::api::process API 已移除。请使用 tauri_plugin_shell::ShellExttauri_plugin_shell::process::CommandEvent API。更多信息请参考 从 Rust 运行外部二进制文件 指南。

在 v2 版本中,“process-command-api”功能标志已被移除。因此,运行外部二进制文件不再需要在 Tauri 配置中定义此功能。

迁移权限

在 v1 版本中,许可列表已被重写为一个完全新的权限管理系统,适用于单个插件,并且在多窗口和远程 URL 支持方面的配置性大大增强。这个新系统类似于访问控制列表(ACL),您可以允许或拒绝命令,将权限分配给特定的窗口和域集合,并定义访问范围。

为了启用您的应用程序的权限,您必须在 src-tauri/capabilities 文件夹中创建能力文件,Tauri 将为您自动配置其他一切。

CLI 命令 migrate 会自动解析您的 v1 许可列表,并生成相关的能力文件。

要了解更多关于权限和能力的信息,请参阅安全文档


© 2025 Tauri 贡献者。CC-BY / MIT