103 lines
4.9 KiB
Markdown
103 lines
4.9 KiB
Markdown
# Paw GUI
|
||
|
||
Paw 的 GUI 客户端,基于 Tauri 构建。
|
||
|
||
- 有关系统服务部分,请看其[独立的文档](./src-tauri/system
|
||
-service/README.md)
|
||
- 有关 Rust 部分,请看其[独立的文档](./src-tauri/README.md),下文是前端的项目结构介绍
|
||
|
||
## 项目结构
|
||
|
||
- index.html 前端入口
|
||
- package.json 包管理器配置文件
|
||
- tailwind.config.js tailwindcss配置文件
|
||
- postcss.config.js postcss配置文件
|
||
- tsconfig.json ts编译器配置
|
||
- tsconfig.node.json 同上
|
||
- vite.config.ts vite配置,管理打包相关
|
||
- **`build-sidecar.mjs` 用于打包 sidecar 程序,在调试、发布前会被调用**
|
||
- src/
|
||
- assets/ 前端使用的静态资源,如图片、字体
|
||
- components/ 前端组件
|
||
- pages/ 前端不同页面
|
||
- utils/ 实用工具模块
|
||
- App.css 全局 CSS 代码块,目前仅用于导入 tailwindcss
|
||
- App.tsx 软件页面入口
|
||
- **bindings.ts 自动生成的 command、event 和类型的定义(从 rust 端)**
|
||
|
||
## 如何启动/调试项目
|
||
|
||
1. 安装语言工具链(需要node、pnpm、rust工具链和go工具链),目前需要go工具链是因为 `build-sidecar.mjs` 中也生成 CLI 的二进制文件,未来可能改为下载
|
||
2. 安装依赖 `pnpm i`
|
||
3. 启动调试模式 `pnpm tauri dev` (`build-sidecar.mjs`会在其中自动先运行,但是如果更改了 sidecar 的源代码,需要手动重新运行该命令,sidecar 包括 `src-tauri/system-service` 和 `../proxy`)
|
||
|
||
## 如何打包测试客户端
|
||
|
||
假设你已经完成了调试的步骤,那么只需要执行 `pnpm tauri build` 即可构建项目,构建完成后会在 `src-tauri/target/release/bundle` 中生成对应的**测试用安装包**。
|
||
|
||
## 如何打包正式客户端
|
||
|
||
首先,需要按照下表设置环境变量
|
||
|
||
|变量名|值类型|示例值|说明|
|
||
|---|---|---|---|
|
||
|GRPC_ENDPOINT|用逗号分割的端点组|"156.229.167.121:9090,"|GRPC 服务的端点|
|
||
|COSMOS_ENDPOINT|用逗号分割的端点组|"http://156.229.167.121:26657,"|COSMOS 服务的端点|
|
||
|NODE_SECRET|字符串|"ZXN0YXRlIH…xhgdmlkZW8="|账户助记词的base64|
|
||
|IS_DEBUG|字符串|"false"|必须为"true"或"false"|
|
||
|ACCOUNT_NAME|字符串|"de1"|账户名|
|
||
|
||
然后,执行 `pnpm tauri build` 即可构建项目,构建完成后会在 `src-tauri/target/release/bundle` 中生成对应的**正式用安装包**。
|
||
|
||
注意,**启动后程序会将配置文件持久化到 `%AppData%\com.paw.paw-gui` 中**,这个路径由 tauri 的 store 插件指定,如果使用了不同的环境变量构建程序,并且想要重复启动调试,还需要删除这个里面的json文件
|
||
|
||
这个路径在不同操作系统是不同的,查看Tauri的源代码发现其利用了库 dirs 的 data_dir,如下:
|
||
|
||
- Linux: `XDG_DATA_HOME/com.paw.paw-gui` 或 `$HOME/.local/share/com.paw.paw-gui`
|
||
- Windows: `%AppData%/com.paw.paw-gui`
|
||
- macOS: `$HOME/Library/Application Support/com.paw.paw-gui`
|
||
|
||
|
||
|
||
|
||
## 多个二进制之间的关系
|
||
|
||
- GUI: 本项目,直接调用安装卸载器,通过HTTP与Core、Service通信
|
||
- Core: Go编写的命令行程序,位于 `../proxy/cmd/client`
|
||
- SystemService: 运行在系统服务中的二进制,位于 `src-tauri/system-service`
|
||
- ServiceInstaller: 用于安装系统服务的二进制,位于 `src-tauri/system-service/installer/install.rs`
|
||
- ServiceUninstaller: 用于卸载系统服务的二进制,位于 `src-tauri/system-service/installer/uninstall.rs`
|
||
|
||
```mermaid
|
||
flowchart LR
|
||
Core <-- HTTP --> GUI
|
||
|
||
|
||
SystemService <-- HTTP --> GUI
|
||
|
||
GUI -- sudo exec --> ServiceInstaller
|
||
ServiceInstaller -- install --> SystemService
|
||
GUI -- sudo exec --> ServiceUninstaller
|
||
ServiceUninstaller -- uninstall --> SystemService
|
||
|
||
SystemService -- exec/kill --> Core
|
||
```
|
||
|
||
## 如何更改 sidecar 的名称?
|
||
|
||
1. 更改对应 `Cargo.toml` 中 `bin/name` 的名字(系统服务这么改,CLI直接修改GO项目输出文件名即可)
|
||
2. 更改 `build-sidecar.mjs` 脚本中 `binaries` 数组中的名称字符串与上一步匹配(CLI则修改下载文件名)
|
||
3. 更改 `tauri.config.json` 中 `externalBin` 名称
|
||
4. 更改 `src-tauri/common/lib.rs` 中的静态字符串名称
|
||
5. 更改 `src-tauri/install-scripts` 中安装脚本中的字符串名称
|
||
|
||
## 如何更新程序版本号?
|
||
|
||
更改 `src-tauri/Cargo.toml` 中的 `workspace.package.version`(GUI、系统服务和 Common 的 package 版本号),不需要管理 `package.json` 版本号。不论是 cargo 识别到的环境变量,还是 tauri 中获取的版本号,都是以此为准。
|
||
|
||
若 GUI 发现系统服务返回的版本号与自身不一致,会执行卸载重装系统服务的操作,使得系统服务版本再次与自己匹配。
|
||
|
||
## 其他注意事项
|
||
|
||
- 在 Linux 上,提权依赖 pkexec,因此在 WSL 下,通过程序内安装服务需要先安装 polkit,而且需要有桌面环境(但是在程序通过包管理器安装时应该已经安装过服务了,这个仅作为修复服务的方案)
|