配置桌面应用
配置 01MVP Desktop 的应用身份、环境变量、窗口、图标、CSP 和后端 origin
把模板改成自己的桌面应用,第一步不是写功能代码,而是改配置。应用身份、环境变量、后端 origin 这些东西不定下来,登录跑不通,本地数据会存错位置,打包出来的安装包也是模板的名字。
下面按优先级走一遍。
你将学到
- 桌面应用的"身份"是什么,为什么 identifier 一旦发布就不能改
- 如何设置开发版和正式版的隔离
- 桌面端环境变量怎么写、在哪校验
- 后端 origin 和 CSP 如何影响登录和网络请求
- 窗口尺寸和图标的配置位置
应用身份:productName、identifier、version
桌面应用比 Web 多了一层"系统身份"。操作系统用这三项来识别你的应用:
{
"productName": "01MVP Desktop",
"version": "0.1.0",
"identifier": "com.01mvp.desktop.template"
}- productName — 用户在菜单栏、Dock、任务栏看到的名字。
- version — 安装包和自动更新依赖的版本号,遵循 semver。
- identifier — 系统级别的唯一标识。macOS 用它做 Keychain namespace、App Sandbox 容器和签名;Windows 用它做注册表和 app data 路径;Tauri 用它定位本地数据目录。
为什么 identifier 这么重要?因为它不只是一行配置——它直接决定操作系统怎么对待你的应用:
- 本地数据目录 — Tauri 的 app data、preferences、日志都存在以 identifier 命名的路径下
- 系统权限 — macOS 的 Keychain、文件访问权限、通知都绑定到 identifier
- 自动更新 — 更新服务用 identifier 判断"这是同一个应用的新版本"还是"这是一个不同的应用"
- 签名和公证 — 代码签名证书和 identifier 一起构成应用的可信身份
改造成自己的应用时,把三项都换成你自己的:
| 字段 | 示例 | 说明 |
|---|---|---|
productName | Acme Studio | 用户看到的应用名 |
version | 0.1.0 | 发布时递增 |
identifier | com.acme.studio | 反向域名格式,全局唯一 |
identifier 一旦开始分发就不要改。改了以后操作系统会把它当成一个全新应用——用户本地数据、Keychain 凭据、权限记录、更新链路全部丢失。
开发版和正式版隔离
推荐开发和正式环境用不同的身份,避免测试数据污染正式用户:
| 项 | 开发版 | 正式版 |
|---|---|---|
| 应用名 | Acme Studio Dev | Acme Studio |
| identifier | com.acme.studio.dev | com.acme.studio |
| API | 本地或 staging | production |
| 签名 | Apple Development 或 ad-hoc | Developer ID / Windows code signing |
分开之后,两套应用各有独立的数据目录和权限记录,可以在同一台机器上共存。
环境变量
桌面端前端通过 VITE_DESKTOP_* 前缀的环境变量获取配置:
VITE_DESKTOP_APP_NAME="Acme Studio"
VITE_DESKTOP_SERVER_URL="http://localhost:7001/api"
VITE_DESKTOP_WEB_URL="http://localhost:7001"校验逻辑集中在 apps/desktop/src/config/desktop-env.ts,应用启动时就会检查这些变量是否合法。如果缺了或者格式不对,应用会在控制台报错而不是静默失败——这比运行到一半才发现请求地址不对要好得多。
规则很简单:
VITE_DESKTOP_SERVER_URL必须指向/api路径VITE_DESKTOP_WEB_URL是网页入口,不带/api- 所有
VITE_前缀的变量会打包进前端 bundle,不要放服务端 secret
后端 origin
桌面端的 WebView 通过 HTTP 请求和后端通信。但后端不是随便谁都能调的——它需要验证请求来源是否可信。这个验证用于两个地方:CORS 中间件拦截跨域请求,Better Auth 校验登录回调的 origin。
把桌面端的 origin 加到白名单里:
DESKTOP_ALLOWED_ORIGINS="http://localhost:7410,http://127.0.0.1:7410,tauri://localhost,http://tauri.localhost"这个变量被两个地方消费:
products/01mvp/apps/web/src/server/hono.ts # CORS 中间件
products/01mvp/packages/auth/src/index.ts # Better Auth trusted origins本地开发保留默认值即可。如果你在生产环境使用了自定义的 Tauri origin 或 webview origin,记得把它加到列表里,否则登录会失败。
窗口配置
窗口尺寸在 tauri.conf.json 中定义:
{
"app": {
"windows": [
{
"label": "main",
"title": "01MVP Desktop",
"width": 1180,
"height": 780,
"minWidth": 1024,
"minHeight": 720
}
]
}
}模板默认按桌面工作台设计。根据你的产品类型调整:
- 工具型工作台 — 保持 1100px 以上宽度
- 菜单栏小工具 — 单独设计小窗口,不沿用工作台布局
- 编辑器/内容工具 — 增大默认高度,保留可调整窗口
CSP
Content Security Policy 也在 tauri.conf.json 中。CSP 控制 WebView 里允许加载哪些资源——脚本、样式、图片、网络请求都受它约束。生产环境只放行必要的来源:
{
"security": {
"csp": "default-src 'self'; connect-src ipc: http://ipc.localhost https://01mvp.com http://localhost:* http://127.0.0.1:*; img-src 'self' asset: data:; style-src 'self' 'unsafe-inline'; script-src 'self'; object-src 'none'; frame-ancestors 'none'"
}
}新增 API 域名、图片 CDN 或更新服务时,要同步更新 CSP,否则请求会被浏览器拦截。
图标
模板图标在 apps/desktop/src-tauri/icons/icon.png。这是打包时 macOS、Windows、Linux 各尺寸图标的源文件。
改图标时,从一份品牌源文件(建议 1024x1024 PNG)生成所有平台资源。Tauri CLI 提供了 tauri icon 命令可以一键生成各尺寸。分别手工改 macOS、Windows、Linux 图标很容易出现品牌不一致——比如 Dock 上是一个图标,安装包封面是另一个。
下一步
配置完成后,对照改成自己的 App逐项检查,确保所有身份、变量和权限都已就位。
想和其他创造者交流?
这篇文档有问题?