项目结构
灵动桌面框架采用前后端分离的目录结构,前端代码在 src/,后端代码在 src-tauri/。
完整目录
my-app/
├── index.html # HTML 入口
├── package.json # 前端依赖与脚本
├── vite.config.ts # Vite 配置(路径别名 @/、端口 1420)
├── vite.mobile.config.ts # 移动端 SPA 的独立 Vite 配置(端口 1520,可选)
├── tsconfig.json # TypeScript 配置(含 @/* 路径映射)
│
├── src/ # ★ 前端源码 (React 19)
│ ├── main.tsx # React 入口(含窗口显示兜底)
│ ├── App.tsx # 根组件(主题 + 路由)
│ ├── Router.tsx # 路由配置 (createBrowserRouter)
│ ├── theme/ # 主题配置
│ │ └── antdTheme.ts # Ant Design 暗/亮主题
│ ├── styles/ # 全局样式
│ │ ├── variables.css # CSS 设计令牌
│ │ └── global.css # TailwindCSS 全局样式
│ ├── store/ # Zustand 状态管理
│ │ ├── app.ts # UI 状态(主题/侧边栏)
│ │ ├── settings.ts # 设置状态(语言/关闭行为)
│ │ └── index.ts # 统一导出
│ ├── types/ # TypeScript 类型
│ │ ├── config.ts # 配置相关类型
│ │ ├── system.ts # 系统信息类型
│ │ └── index.ts # 统一导出
│ ├── hooks/ # 自定义 Hooks
│ │ └── useCommand.ts # invoke 封装 + loading/error 状态
│ ├── lib/ # 工具库
│ │ └── api/ # API 封装
│ │ ├── client.ts # invoke 再导出 + 错误解析
│ │ ├── config.ts # 配置 API(configApi)
│ │ ├── system.ts # 系统 API(systemApi)
│ │ ├── updater.ts # 更新 API(updaterApi)
│ │ └── index.ts # 统一导出
│ ├── components/ # 通用组件
│ │ ├── GlobalNativeTooltip.tsx # 把原生 title 提示统一成 AntD Tooltip
│ │ ├── ui/ # UI 组件
│ │ │ ├── ErrorBoundary.tsx # 错误边界
│ │ │ ├── ThemeToggle.tsx # 三态主题切换(暗/亮/跟随系统)
│ │ │ └── UpdateModal.tsx # 更新提示弹窗
│ │ └── layout/ # 布局组件
│ │ ├── AppLayout.tsx # 主布局
│ │ ├── Sidebar.tsx # 侧边栏
│ │ └── WindowControls.tsx # 自绘窗口按钮(最小化/最大化/关闭)
│ ├── pages/ # 页面组件
│ │ ├── home/index.tsx # 首页
│ │ ├── settings/index.tsx # 设置页
│ │ └── about/index.tsx # 关于页
│ └── mobile/ # 移动端伴侣 SPA(独立入口,可选)
│
├── src-tauri/ # ★ 后端源码 (Rust)
│ ├── Cargo.toml # Rust 依赖
│ ├── tauri.conf.json # Tauri 核心配置
│ ├── tauri.conf.dev.json # 开发版覆盖配置(identifier 加 .dev)
│ ├── build.rs # 构建脚本
│ ├── Entitlements.plist # macOS 签名权限
│ ├── capabilities/ # 权限声明
│ │ └── default.json # 默认权限集
│ ├── icons/ # 应用图标
│ └── src/
│ ├── main.rs # Rust 进程入口
│ ├── lib.rs # Builder 中枢(注册插件/命令/状态)
│ ├── error.rs # 错误类型定义(AppError / CommandError)
│ ├── state.rs # 全局状态(AppState,持有 Database)
│ ├── tray.rs # 系统托盘
│ ├── models/ # 数据模型
│ │ └── mod.rs # 结构体定义
│ ├── database/ # 数据访问层
│ │ ├── mod.rs # Database + CRUD
│ │ └── schema.rs # Schema 迁移
│ ├── services/ # 业务逻辑层
│ │ ├── mod.rs # 模块导出
│ │ ├── config.rs # 配置服务
│ │ └── main_window_placement.rs # 主窗口显示器记忆
│ ├── commands/ # IPC 命令层
│ │ ├── mod.rs # 命令导出
│ │ ├── system.rs # 系统命令
│ │ └── config.rs # 配置命令
│ ├── remote/ # 远程访问网关骨架(axum,默认不启用)
│ └── shared/ # 工具函数
│ ├── mod.rs
│ └── time_utils.rs
│
├── mobile-tauri/ # Tauri Mobile 壳子项目(可选)
└── public/ # 静态资源
关键文件说明
src-tauri/tauri.conf.json
Tauri 核心配置,控制窗口尺寸、打包参数、安全策略等。
src-tauri/tauri.conf.dev.json
pnpm tauri:dev 时合并到主配置之上,只覆盖 productName 与 identifier,让开发版和正式版各占一个单实例锁、互不阻塞。
src-tauri/capabilities/default.json
权限声明文件,定义应用可以使用哪些系统 API(Tauri 2.x 强制要求)。
src/lib/api/
所有前端到后端的调用都封装在这里,禁止在页面中直接使用 invoke()。
vite.config.ts
配置了 @/ 路径别名,指向 src/ 目录;开发服务器固定 1420 端口(strictPort: true),并忽略 src-tauri/ 的文件监听。