⚠️ 这篇已失效,仅作历史记录保留

本文写于 2026-08-10,依据的是 gameboxclient旧代码基线。 当前代码库已被整体替换:文中反复出现的 /workspace(游戏资源库)、 /option(游戏发布栈)、src/views/Workspace/src/views/UI/ 在新代码中均已不存在, 所有 file:line 引用都无法再定位。

请改读重建后的课程首页, 或直接看新的架构图接手文档

Reference · 遇到生词先查这里

词汇表

每条一句人话,加一处「在本项目哪里」。技术词来自官方文档,项目词来自源码。

用法

课程里任何一个你没听说过的词,先在这查。查不到就直接问我 ——那说明我用了一个没解释的词,我会补进来。这张表会一直长。

Vue 生态

人话 在本项目
SFC / .vue 单文件组件。一个文件里同时写模板、逻辑和样式,等于一个 UI 部件 src/views/**/*.vue
<script setup> 写组件逻辑的新写法。文件顶层声明的变量,模板里直接就能用 src/App.vue:1
响应式 读的时候记账、写的时候通知。你读过某个数据,它一变, Vue 自动重跑你那段逻辑——省掉手写 emit/on 课 02
ref / reactive 把一个值/对象变成响应式的。ref 取值要写 .value(模板里不用) 满地都是
computed 派生值。依赖没变就不重算,算过一次会缓存
watch 盯住某个数据,变了就跑一段副作用。默认异步执行(flush: 'pre' src/store/modules/GameEvn.ts:44
props / emit 父传子叫 props,子告诉父叫 emit。只能一层一层传 src/views/Option/Components/
Pinia Vue 官方的状态管理库。一个能被界面订阅的全局单例, 用来放「跨越组件树、没法用 props 传」的数据 14 个 store,见 课 02
store Pinia 里的一个单例。三个部件:state(数据)、 getters(派生值)、actions(改数据的方法) src/store/modules/*.ts
Vue Router 路由:URL ↔ 页面组件的对应表。本项目用 hash 路由 (地址里带 #),因为桌面端没有服务器帮忙做 URL 重写 src/router/index.ts
Element Plus 现成的 UI 组件库(表格、弹窗、下拉……)。界面上大部分控件都是它的 el-* 开头的标签

构建与桌面壳

人话 在本项目
Vite 构建工具(打包 + 开发服务器)。相当于前端的 tsc + nodemon vite.config.ts
mode vite --mode pro 决定读哪个 .env.* 文件 package.json 的 scripts
import.meta.env Vite 的「环境变量」。但它是构建期替换成字面量的, 不是运行时读取——这是整条运行时配置链存在的理由 课 01
主进程 Electron 的「壳」。管窗口、菜单、系统能力。只有一个 electron/main/
渲染进程 窗口里那个 Chromium 页面。本项目的业务几乎全在这层 src/
IPC 两个进程之间喊话。两种:invoke/handle(一问一答)、 send/on(单向广播) electron/main/channel/
nodeIntegration 让网页里能直接用 Node(读文件、开子进程)。官方不推荐, 本项目全开了 electron/main/index.ts:48
contextIsolation 把网页和 Electron 内部隔开的安全墙。本项目关了 electron/main/index.ts:49
preload 正常 Electron 里,网页拿系统能力的唯一合规通道。 本项目的 preload 从未被加载,是死代码 vite.config.ts:62,72(被注释)
@electron/remote 本项目实际用的能力入口:在渲染层直接拿主进程的对象。官方已不推荐 src/utils/extend/electron.ts:1
asar / asarUnpack 打包时源码被塞进一个 asar 归档;里面的可执行文件跑不了, 必须用 asarUnpack 排除出来 electron-builder.json5

本项目自有词汇

全部摘自 src/locales/zh-CN.ts——这是界面上真实出现的说法。

人话 在本项目
游戏资源库 浏览、替换、提交资源的主界面。本质是个 SVN 工作副本管理器 /workspaceviews/Workspace/index.vue
游戏发布栈 把资源变成玩家能拿到的版本的那一串任务 /optionviews/Option/Option.vue
pCode 后端用来认「这是哪一款游戏」的编码。每个请求都带它,带错就操作到别的游戏了 登录后由后端下发,envOption.ts:39-45
测试版 / 正式版 GM 页面顶部那个下拉。选「测试版」的实现方式是给 pCode 拼一个 _dev 后缀 zh-CN.ts:214-215GM/GameNotice/index.vue:110-115
GameENV 登录后真正生效的那份配置,存在 sessionStorage 里。不是 .env 运行时配置速查卡
currentRouter 名字像路由,其实是「接口打给哪套服务」的开关。GM 弹窗会把它改成 /GM service.ts:67-70
四步流程 发布栈里每条通道固定的四步:
上传① 提交工作台改的资源 → 更新② 压缩资源 → 同步资源③ 编译打包 → 发布④ 推到服务器
zh-CN.tsprojectOption
开发版 / 测试服 / 正式服 三条发布通道。开发版给内部预览网页,测试服给内部测试, 正式服 = 所有玩家 publishWebDev / publishWebAlpha / publishWebProd
热更 不重装客户端,只下发变了的资源。与「发布网页版」是两条不同的产出 publishProd:'发布正式版热更 ④'
盒子 玩家那一侧收热更、启动游戏的客户端。和本工具 GameBox 同名不同物 界面原话:「可以在盒子中更新游戏」
自动构建 把四步流程串起来连续跑,一条通道完了自动进下一条 compileAuto:'自动构建'
工作副本 本机上那份和 SVN 仓库对应的目录,是浏览和替换资源的实际对象 src/api/workspace/index.ts
构建(Jenkins) 一次远端打包的执行实例,有进度、成败。进度每 5 秒轮询一次 src/store/modules/jenkins.ts

两个还没核实的词

盒子:只在发布提示文案里出现过,尚未与业务方核对它到底指什么。
渠道 / channel:登录时会把 Jenkins job 名里的字面量 channel 替换成实际值(envOption.ts:72),但「一个渠道对应什么」需要问人。