paw-gui/README.md
2025-04-14 19:17:53 +08:00

103 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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而且需要有桌面环境但是在程序通过包管理器安装时应该已经安装过服务了这个仅作为修复服务的方案