Files
starRiverProperty/docs/superpowers/specs/2026-04-29-frontend-source-design.md
T
反编译工作区 e8672a3c7b fix: relocate cwos-portal decompiled output to correct path; remove nested directory
Former-commit-id: dc30d42a8c55ed8b2382a41dc2434233fbed9930
2026-04-29 12:09:48 +08:00

8.2 KiB
Raw Blame History

frontend-source/ 反编译与重建方案设计

日期: 2026-04-29 版本: 1.0 状态: 待审查

1. 背景与目标

背景

  • frontend/ 目录包含 28 个 Vue 2 + Element UI 前端应用,均为 webpack 构建的 dist 产物
  • 原始源码(.vue / webpack.config.js / package.json)已丢失,无法找到
  • 当前迭代中前端工作被跳过,但长期需要恢复前端功能拓展能力

目标

创建 frontend-source/ 同级目录,分两阶段将 dist 产物转化为可维护的源码:

阶段 范围 目标 输出质量
阶段 1 全部 28 个应用 反编译为可读源码 B 级:代码可理解、可修改
阶段 2 4 个核心应用 重建为可构建工程 C 级:可 npm run build

2. 目录结构

反编译/
├── frontend/                              # 现有 dist 产物(只读)
└── frontend-source/                       # 新建目标目录
    ├── AGENTS.md
    ├── .gitignore                         # node_modules/
    │
    ├── decompiled/                        # 阶段 1 产物(B 级反编译)
    │   ├── cwos-portal/
    │   ├── elevator-front/
    │   ├── alarm-front/
    │   ├── front_acs/
    │   ├── ...(其余 24 个)
    │   │
    │   └── [每个应用结构]:
    │       ├── README.md                  # API 清单 + 路由表 + 组件树
    │       ├── src/
    │       │   ├── views/                 # 页面级模块
    │       │   ├── components/            # 自定义组件
    │       │   ├── api/                   # API 端点清单
    │       │   └── router/                # 路由定义
    │       ├── static/                    # CSS/img/font 复用
    │       └── index.html                 # 原样
    │
    ├── projects/                          # 阶段 2 产物(C 级重建)
    │   ├── cwos-portal/                   # 物业管理门户
    │   │   ├── package.json
    │   │   ├── vue.config.js
    │   │   ├── src/
    │   │   │   ├── main.js
    │   │   │   ├── App.vue
    │   │   │   ├── views/
    │   │   │   ├── components/
    │   │   │   ├── api/
    │   │   │   ├── router/
    │   │   │   └── store/
    │   │   └── public/
    │   ├── elevator-front/                # 电梯管理
    │   ├── alarm-front/                   # 报警管理
    │   └── front_acs/                     # 门禁管理
    │
    └── scripts/                           # 反编译工具
        ├── unpack-webpack.js              # webpack bundle 解包
        ├── extract-api-calls.js           # API 端点提取
        ├── extract-router.js              # 路由表提取
        ├── beautify-all.sh                # 批量格式化
        └── compare-output.sh              # 产物对比

3. 阶段 1:B 级反编译(全部 28 个)

3.1 反编译流水线

frontend/<app>/*.js  ──► [1. 解包] ──►  modules/*.raw.js
                                     ──► [2. 格式化] ──►  modules/*.formatted.js
                                                         ──► [3. 分析] ──►  api-calls.json
                                                                            router-tree.json
                                                                            component-tree.json
                                                                            ──► [4. 组织] ──► decompiled/<app>/

3.2 各步骤详细说明

步骤 1 — 解包

  • 识别 webpack bundle 的模块结构(__webpack_modules____webpack_require__
  • 按模块 ID 拆分为独立文件
  • 处理 chunk 文件的异步加载引用

步骤 2 — 格式化

  • 使用 js-beautify 处理缩进、换行
  • 使用 prettier 统一代码风格
  • 保留注释(如有)

步骤 3 — AST 分析

  • 使用 @babel/parser 解析格式化后的 JS
  • 提取:
    • API 调用axios.get/postthis.$http 等 HTTP 请求模式
    • 路由定义vue-routerroutes 数组和 path/component 映射
    • 组件注册Vue.component()components: {} 局部注册
    • Element UI 引用this.$messageel-form 等使用点

步骤 4 — 组织

  • 根据分析结果归类文件到 views/components/api/router
  • 编写每应用的 README.md(API 清单、路由表、组件树)
  • 原样复制 static/ 下的 CSS/img/font

3.3 28 个应用处理顺序

优先级 应用数 说明
P0 cwos-portal 先跑通工具链验证
P1 elevator-front, alarm-front, front_acs 阶段 2 目标
P2 canoe-account, canoe-car, canoe-device, canoe-person Canoe 系列
P3 其余 20 个 批量处理

4. 阶段 2:C 级重建(4 个核心)

4.1 技术栈

选用 理由
框架 Vue 2.6 与原始一致(chunk-elementUI 确认)
UI 库 Element UI 2.15 原始使用 Element UI
构建 Vue CLI 4.5 稳定版本
HTTP axios 0.21 与 V1 时代匹配
路由 vue-router 3.x 与 Vue 2 配套
状态管理 vuex 3.x 仅使用到的应用引入

4.2 重建流程(每个应用)

  1. 工程脚手架vue create 或手动搭建 Vue 2 + Element UI 项目结构
  2. 路由重建:根据阶段 1 提取的 router-tree.json 还原 router/index.js
  3. API 层:根据 api-calls.json 建立 api/ 模块(axios 封装)
  4. 页面重建:逐页面创建 .vue SFC,参考原 dist 的 CSS 样式
  5. 组件重建:抽取可复用组件为独立 .vue 文件
  6. 构建验证npm run build 并对比产物与原 dist

4.3 四个核心应用的重建重点

应用 预计页面数 核心功能
cwos-portal 15-20 主框架布局、菜单树、仪表板、项目管理
elevator-front 10-15 电梯派梯、设备管理、楼层配置、通行规则
alarm-front 8-12 报警列表、规则配置、实时推送、统计
front_acs 10-15 门禁权限、区域管理、通行日志、人员管理

5. 工具脚本设计

5.1 unpack-webpack.js

输入: <app>/static/js/app.xxx.js
处理: 解析 webpack bundle 结构,按模块 ID 拆分
输出: modules/<module-id>.js

5.2 extract-api-calls.js

输入: modules/*.formatted.js
处理: AST 遍历查找 HTTP 调用模式
输出: api-calls.json (端点、方法、参数)

5.3 extract-router.js

输入: modules/*.formatted.js
处理: 查找 vue-router 的 routes 定义
输出: router-tree.json (path → component 映射)

5.4 beautify-all.sh

输入: modules/*.js
处理: 批量 js-beautify + prettier
输出: modules/*.formatted.js

6. 质量验证

阶段 1 验证

  • 每个应用产出 README.md(含 API 清单、路由表)
  • 代码通过 js-beautify 格式化
  • 无原始混淆变量残留(至少重命名为有语义的名称)
  • 与原 dist 的 CSS/img 完整对应

阶段 2 验证

  • npm install 成功
  • npm run build 成功
  • 构建产物与原 dist 的页面数量一致
  • API 端点覆盖与原一致

7. 风险与限制

风险 影响 缓解措施
变量名无法完全还原 代码可读性下降 通过上下文推断 + 手工标注语义名
Vue SFC 无法自动还原 阶段 1 产物为 .js 而非 .vue 阶段 2 手工重建为 .vue
webpack 配置不可知 构建配置需猜测 参考 Vue CLI 默认配置,按需调整
部分 Chunk 为第三方库 浪费分析时间 用文件名规则(chunk-libs、chunk-elementUI)过滤

8. 与现有仓库的集成

  • frontend-source/ 为新建独立目录,不修改 frontend/
  • 加入根 .gitignore 白名单(类似 frontend/ 的显式 ! 规则)
  • 产出 frontend-source/AGENTS.md 作为本目录说明
  • 产出 docs/superpowers/specs/ 下的本设计文档