3 从 Tauri 2.0 Beta 升级

原文链接: https://tauri.app/start/migrate/from-tauri-2-beta/

本指南将带你把自己的 Tauri 2.0 beta 应用升级到 Tauri 2.0 候选发布版。

自动迁移

Tauri v2 CLI 提供了 migrate 命令,可以自动完成大部分迁移流程,并帮助你完成剩余工作:

1
2
npm install @tauri-apps/cli@latest
npm run tauri migrate
1
2
yarn upgrade @tauri-apps/cli@latest
yarn tauri migrate
1
2
pnpm update @tauri-apps/cli@latest
pnpm tauri migrate
1
cargo tauri migrate
在命令行界面参考中进一步了解 migrate 命令。

破坏性变更

从 beta 到候选发布版,我们做了一些破坏性变更。这些变更既可以自动迁移(见上文),也可以手动完成。

Tauri 核心插件

我们修改了在能力(capabilities)中引用 Tauri 内置插件的方式 PR #10390。

若要从最新的 beta 版本迁移,你需要在能力(capabilities)中为所有核心权限标识符加上 core: 前缀,或者改用 core:default 权限并移除旧的核心插件标识符。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
"permissions": [
    "path:default",
    "event:default",
    "window:default",
    "app:default",
    "image:default",
    "resources:default",
    "menu:default",
    "tray:default",
]
...
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
"permissions": [
    "core:path:default",
    "core:event:default",
    "core:window:default",
    "core:app:default",
    "core:image:default",
    "core:resources:default",
    "core:menu:default",
    "core:tray:default",
]
...

我们还新增了一个特殊的 core:default 权限集,它包含所有核心插件的全部默认权限,因此你可以简化能力(capabilities)配置中的权限样板代码。

1
2
3
4
"permissions": [
    "core:default"
]
...

内置开发服务器

我们对内置开发服务器的网络暴露方式做了修改 PR #10437 和 PR #10456。

内置的移动端开发服务器不再在整个网络上暴露,而是把流量从本地机器直接隧道传输到设备。

目前在 iOS 设备上运行(无论是直接运行还是从 Xcode 运行)时,这项改进还不会自动生效。这种情况下我们默认使用开发服务器的公网地址,但有一个绕过的办法:打开 Xcode 自动建立 macOS 机器与已连接 iOS 设备之间的连接,然后运行 tauri ios dev --force-ip-prompt 来选择 iOS 设备的 TUN 地址(以 ::2 结尾)。

如果你的开发服务器配置打算在真实 iOS 设备上运行,就需要适配这一变更。以前我们建议检查 TAURI_ENV_PLATFORM 环境变量是否匹配 android 或 ios,但既然现在除非使用 iOS 设备都可以连接到 localhost,你应该改为检查 TAURI_DEV_HOST 环境变量。下面是一个 Vite 配置迁移的示例:

  • 2.0.0-beta:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import { defineConfig } from 'vite';
import { svelte } from '@sveltejs/vite-plugin-svelte';
import { internalIpV4Sync } from 'internal-ip';

const mobile = !!/android|ios/.exec(process.env.TAURI_ENV_PLATFORM);

export default defineConfig({
  plugins: [svelte()],
  clearScreen: false,
  server: {
    host: mobile ? '0.0.0.0' : false,
    port: 1420,
    strictPort: true,
    hmr: mobile
      ? {
          protocol: 'ws',
          host: internalIpV4Sync(),
          port: 1421,
        }
      : undefined,
  },
});
  • 2.0.0:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import { defineConfig } from 'vite';
import Unocss from 'unocss/vite';
import { svelte } from '@sveltejs/vite-plugin-svelte';

const host = process.env.TAURI_DEV_HOST;

export default defineConfig({
  plugins: [svelte()],
  clearScreen: false,
  server: {
    host: host || false,
    port: 1420,
    strictPort: true,
    hmr: host
      ? {
          protocol: 'ws',
          host: host,
          port: 1430,
        }
      : undefined,
  },
});
最后修改 September 25, 2026: 更新 (4c0ee2db0)