跳到內容
Tauri

從 Tauri 1.0 升級

本指南將引導您將 Tauri 1.0 應用程式升級到 Tauri 2.0。

準備行動裝置

Tauri 的行動裝置介面要求您的專案輸出一個共享函式庫。如果您現有的應用程式目標是行動裝置,您必須變更您的 crate 以產生該類型的產出物,以及桌面執行檔。

  1. 變更 Cargo manifest 以產生函式庫。附加以下區塊
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 macro 準備您的函數以在行動裝置上執行。

  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:啟用自訂協定請求 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。請查看新的 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_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/emitTo 函數,以觸發特定目標的事件。
  • emit_filter 現在根據 EventTarget 而不是視窗進行篩選。
  • listen_global 重新命名為 listen_any。它現在監聽所有事件,無論其篩選器和目標為何。
  • JavaScript:event.listen() 的行為類似於 listen_any。它現在監聽所有事件,無論其篩選器和目標為何,除非在 Options 中設定了目標。
  • JavaScript:WebviewWindow.listen 等僅監聽發送到各自 EventTarget 的事件。

多 Webview 支援

Tauri v2 引入了多 Webview 支援,目前在 unstable 功能標誌後面。為了支援它,我們將 Rust Window 類型重新命名為 WebviewWindow,並將 Manager get_window 函數重新命名為 get_webview_window

WebviewWindow JS API 類型現在從 @tauri-apps/api/webviewWindow 而不是 @tauri-apps/api/window 重新匯出。

Windows 上的新 origin URL

在 Windows 上,生產環境應用程式中的前端檔案現在託管在 http://tauri.localhost 而不是 https://tauri.localhost。因此,除非在 v1 中使用了 dangerousUseHttpScheme,否則 IndexedDB、LocalStorage 和 Cookies 將會重設。為了防止這種情況,您可以將 app > windows > useHttpsScheme 設定為 true,或使用 WebviewWindowBuilder::use_https_scheme 以繼續使用 https 協定。

詳細遷移步驟

將您的 Tauri 1.0 應用程式遷移到 Tauri 2.0 時,您可能會遇到的常見情境。

遷移到 Core 模組

@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();

遷移到 Clipboard 外掛程式

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!');

遷移到 Dialog 外掛程式

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'],
},
],
});

遷移到 File System 外掛程式

Rust App::get_cli_matches JavaScript @tauri-apps/api/fs API 已移除。請改用 std::fs (用於 Rust) 和 @tauri-apps/plugin-fs 外掛程式 (用於 JavaScript)

  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

遷移到 Global Shortcut 外掛程式

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'
);

遷移到 Notification 外掛程式

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!');

遷移到 Menu 模組

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();

遷移到 Process 外掛程式

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');

遷移到 Tray Icon 模組

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::SystemTrayMenutauri::menu::Submenu 而非 tauri::SystemTraySubmenutauri::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(())
})

遷移到 Updater 外掛程式

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 Manager

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(())
})

遷移到新的 Window 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 中建立選單時攔截選單事件。

遷移嵌入的額外檔案 (Resources)

在 JavaScript 端,請確保您 遷移至檔案系統外掛程式。此外,請注意在 遷移權限 中對 v1 允許清單所做的變更。

在 Rust 端,請確保您 將路徑遷移至 Tauri Manager

遷移嵌入的外部二進制檔案 (Sidecar)

在 Tauri v1 中,外部二進制檔案及其引數在允許清單中定義。在 v2 中,請使用新的權限系統。閱讀 遷移權限 以獲取更多資訊。

在 JavaScript 端,請確保您 遷移至 Shell 外掛程式

在 Rust 端,tauri::api::process API 已移除。請改用 tauri_plugin_shell::ShellExttauri_plugin_shell::process::CommandEvent API。閱讀 嵌入外部二進制檔案 指南以了解方法。

v2 中已移除 “process-command-api” 功能標誌。因此,執行外部二進制檔案不再需要在 Tauri 設定中定義此功能。

遷移權限

v1 允許清單已重寫為全新的權限系統,該系統適用於個別外掛程式,並且對於多視窗和遠端 URL 支援更具可配置性。此新系統的工作方式類似於存取控制列表 (ACL),您可以在其中允許或拒絕命令、將權限分配給一組特定的視窗和網域,以及定義存取範圍。

若要為您的應用程式啟用權限,您必須在 src-tauri/capabilities 資料夾內建立功能檔案,Tauri 將自動為您配置所有其他內容。

migrate CLI 命令會自動剖析您的 v1 允許清單並產生關聯的功能檔案。

若要了解有關權限和功能的更多資訊,請參閱 安全性文件


© 2025 Tauri 貢獻者。CC-BY / MIT