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.json的security.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 后端线程的协调更高效
迁移步骤建议
- 先升级
@tauri-apps/cli和@tauri-apps/api到 1.x - 运行
cargo update更新 Rust 端依赖 - 根据编译器报错逐个修复 Rust API 变更
- 更新
tauri.conf.json,特别是 allowlist 和 security 部分 - 测试所有系统能力调用(文件操作、HTTP、Shell等),确认 allowlist 配置正确
- 检查前端是否有 CSP 违规
整体迁移工作量取决于项目复杂度。对于小型项目,迁移通常可以在较短时间内完成。最耗时的通常是 CSP 配置——需要把前端所有外部资源的域名都加到白名单里。
小结
Tauri 1.0 的稳定发布对桌面端开发是个好消息。如果你受不了 Electron 的体积和内存占用,Tauri 是目前最成熟的替代方案。1.0 之后 API 稳定了,也有了更完善的安全模型,值得一试。