Tauri 1.0正式发布:迁移指南

Tauri 1.0 在去年正式发布了 stable 版本,从 beta 到 1.0 有不少 Breaking Changes。这篇整理了主要的迁移事项,给还在用 beta 版的同学参考。

为什么关注 Tauri

Electron 应用动辄 100MB+ 的体积、高内存占用一直被诟病。Tauri 用 Rust 做后端,前端复用系统 WebView,打包产物通常只有几 MB,内存占用也低很多。1.0 意味着 API 稳定了,可以放心用于生产项目。

主要 Breaking Changes

配置文件变更

tauri.conf.json 结构做了较大调整:

  • tauri.allowlist 替代了之前的 tauri.whitelist
  • 窗口配置从 tauri.windows 移到了 tauri.windows 数组(结构变了)
  • build.distDir 改名为 build.frontendDist
  • 安全策略相关配置集中到了 tauri.security

新的安全模型 (CSP)

1.0 默认启用 Content Security Policy,这是最影响迁移的改动:

  • 所有外部资源加载需要在 CSP 中显式声明
  • script-src 默认不允许 unsafe-inline(开发模式除外)
  • 需要在 tauri.conf.jsonsecurity.csp 字段配置

如果你的前端用了 CDN 资源或内联脚本,迁移时一定会碰到 CSP 报错,需要逐个添加域名白名单或改用 nonce/hash 方案。

Allowlist 精细化

Tauri 的权限模型是白名单制——你需要显式声明应用要用哪些系统能力:

  • 文件系统读写:fs.readFile, fs.writeFile 等,需要指定 scope(允许访问哪些目录)
  • Shell 命令执行:shell.execute,需要声明允许的命令列表
  • HTTP 请求:http.request,需要声明允许的域名
  • 系统对话框:dialog.open, dialog.save

这比 beta 版更严格了。之前很多能力是默认开启的,现在全部默认关闭。

Rust API 变更

  • tauri::command 宏的参数传递方式变了,现在统一用 State 来注入共享状态
  • 事件系统的 API 改为 app.emit_all()app.listen_global()
  • 窗口管理 API 统一到 Window 结构体上

性能提升

1.0 在性能上做了不少优化:

  • 冷启动时间进一步缩短,比 beta 快了约 20%
  • IPC(Rust <-> JS)通信开销降低,大数据传输场景下有明显改善
  • WebView 渲染线程和 Rust 后端线程的协调更高效

迁移步骤建议

  1. 先升级 @tauri-apps/cli@tauri-apps/api 到 1.x
  2. 运行 cargo update 更新 Rust 端依赖
  3. 根据编译器报错逐个修复 Rust API 变更
  4. 更新 tauri.conf.json,特别是 allowlist 和 security 部分
  5. 测试所有系统能力调用(文件操作、HTTP、Shell等),确认 allowlist 配置正确
  6. 检查前端是否有 CSP 违规

整体迁移工作量取决于项目复杂度。对于小型项目,迁移通常可以在较短时间内完成。最耗时的通常是 CSP 配置——需要把前端所有外部资源的域名都加到白名单里。

小结

Tauri 1.0 的稳定发布对桌面端开发是个好消息。如果你受不了 Electron 的体积和内存占用,Tauri 是目前最成熟的替代方案。1.0 之后 API 稳定了,也有了更完善的安全模型,值得一试。