Files
DP/tempdocs/Shell架构改造计划.md

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