4.6 KiB
4.6 KiB
壳架构 (Shell Architecture) 改造计划
为了实现“登录即更新”和“代码保护”,我们将把现有的 DesignerCEP 单体项目拆分为 壳 (Shell) 和 核 (Core) 两部分。
1. 架构概览
| 模块 | 名称 | 职责 | 部署位置 | 更新频率 |
|---|---|---|---|---|
| Shell | 启动器 (Launcher) | 1. 负责 CEP 扩展的安装与注册 2. 负责用户登录鉴权 3. 下载并解压 Core 包 4. 跳转加载 Core |
本地用户电脑 (安装在 PS 扩展目录) |
极低 (仅当下载逻辑变更时更新) |
| Core | 业务核 (Business) | 1. 包含所有 Vue 业务页面 2. 包含核心 JSX 脚本 3. 通过 Shell 注入的变量与宿主交互 |
远程服务器 (ZIP 压缩包) |
极高 (随时发布新功能) |
2. 目录结构改造建议
目前的 Designer/ 目录将作为核心业务仓库,我们需要在其中增加一个专门构建 Shell 的入口。
Designer/
├── package.json
├── vite.config.ts # [Core配置] 构建业务代码 (输出 dist/core)
├── vite.shell.config.ts # [Shell配置] 构建启动器代码 (输出 dist/shell)
│
├── src/
│ ├── main.ts # [Core入口] 业务主入口 (现在的代码)
│ ├── App.vue # [Core] 业务主界面
│ │
│ └── launcher/ # [Shell] 启动器模块 (NEW)
│ ├── main.ts # [Shell入口]
│ ├── App.vue # [Shell] 登录与更新进度条界面
│ ├── updater.ts # [Shell] 下载/解压/校验逻辑 (Node.js)
│ └── login.ts # [Shell] 登录逻辑
│
└── dist/
├── shell/ # 打包结果:这是给用户安装的 ZXP
│ ├── CSXS/manifest.xml
│ ├── index.html (登录器)
│ └── node_modules (含 fs/adm-zip 等必要依赖)
│
└── core/ # 打包结果:这是传到服务器的 UPDATE.zip
├── index.html (业务界面)
├── assets/
└── jsx/ (加密后的 JSX)
3. 核心运行流程 (Workflow)
3.1 启动阶段 (Shell)
- 用户点击 PS 菜单,加载本地的
dist/shell/index.html。 - Shell App 启动,不再加载复杂的业务组件,只显示登录框。
- 用户输入账号密码 -> 请求服务器
/api/login。 - 登录成功 -> 获取 Token 和 最新 Core 版本号 (比如
v1.0.2)。
3.2 更新阶段 (Updater)
- 检查本地
C:/Users/xxx/AppData/Roaming/DesignerCache/v1.0.2/是否存在。 - 不存在 (有更新):
- 显示进度条。
- 从 CDN/服务器下载
core-v1.0.2.zip。 - 使用 Node.js (
adm-zip) 解压到上述目录。
- 存在: 直接跳过。
3.3 注入阶段 (Launch)
- 加载 JSX:
- Shell 调用
CSInterface.evalScript。 - 读取缓存目录下的
v1.0.2/jsx/index.jsx内容。 - 执行
$.evalFile("C:/.../v1.0.2/jsx/index.jsx"),把业务函数注入此 ExtendScript 上下文。
- Shell 调用
- 加载 UI:
- Shell 执行
window.location.href = "file:///C:/.../v1.0.2/index.html"。
- Shell 执行
- 接管:
- 浏览器跳转,页面变成业务界面。
- 此时
window.cep对象依然存在,业务界面可以继续调用刚刚注入的 JSX 函数。
4. 兼容性评估
现有框架可以完全兼容,只需做以下调整:
- Vite 配置拆分: 需要新增一个
vite.shell.config.ts,专门用来打包轻量级的 Shell。 - Node.js 依赖: Shell 需要打包进
adm-zip(解压用) 和axios(下载用)。由于 CEP 支持 Node.js,这完全没问题。 - 路由模式: 业务代码 (Core) 读取本地文件时,路由最好使用
Hash模式 (createWebHashHistory),避免 file 协议下的路径问题。
5. 下一步行动计划
- [Shell] 创建
src/launcher目录,编写简单的登录+下载器 Demo。 - [Build] 配置
vite.shell.config.ts,尝试打包出一个只包含登录功能的 ZXP。 - [Test] 模拟远程更新,手动把现在的业务代码打包成 ZIP 放在本地服务器,测试 Shell 能否下载并跳转。