用免费 AI 重构 JeeSite 移动端:一套可复用的零成本开发工作流

2026-05-26 20 预计阅读时间:1 分钟
来源:oschina.net AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:16 分钟

JeeSite 快速开发平台的手机端,长期停留在旧架构上——组件陈旧、多端兼容靠手工修补、新需求迭代慢。最近一次全方位重构,把整条移动端从旧架构迁移到现代化前端栈,全程没有花一分钱购买 AI 工具,靠的是一套经过反复调试的免费 AI 辅助开发流程。结果:开发效率显著提升,多端兼容问题一次性收口,新版架构落地比预期快了不少。下面把这套方法拆开讲。

旧架构到底卡在哪里

JeeSite 手机端之前的痛点,不是某一个模块慢,而是架构层面的系统性拖累:

  • 组件库过时:旧版移动端组件基于早期 Vue 2 + 自建 UI,缺少现代移动端交互模式(下拉刷新、虚拟滚动、手势导航等),每次加新交互都要从零写逻辑。
  • 多端适配靠人肉:不同屏幕尺寸、不同浏览器内核的兼容问题,靠开发者逐个调试 CSS 和 JS hack,没有统一的响应式策略。
  • 构建流程断裂:旧构建链路不支持热更新和按需加载,每次改动要全量打包,开发阶段反馈周期长。

这些问题叠加起来,让"升级移动端"变成了一个看起来投入大、产出慢的苦活。这也是很多团队迟迟不动手的原因。

免费 AI 辅助开发的核心思路

很多人对免费 AI 编程工具的固有印象是:生成代码质量差、上下文理解浅、只能写玩具项目。实际体验下来,关键不在工具本身贵不贵,而在你怎么喂上下文、怎么拆任务、怎么校验输出

这套工作流的核心原则有三条:

1. 上下文先行,代码后置

不要直接让 AI "帮我写一个 JeeSite 移动端页面"。先把项目的技术约束喂进去:框架版本、组件库选型、路由结构、API 规范、已有的设计模式。免费工具的上下文窗口有限,但你可以分批次投喂——先给架构约束,再给具体模块需求。

2. 任务拆到单文件粒度

一个"重构整个移动端"的请求,免费 AI 处理不了。拆成:单个页面组件迁移、单个 API 适配层封装、单个构建配置修改。每个任务控制在单文件可完成的范围,AI 输出的可用率大幅提升。

3. 人工校验不可省略

AI 生成的代码必须过三道关:类型检查/ lint、运行时功能验证、与已有代码的风格一致性检查。免费工具不会自动做这些,但你可以把校验规则也写成 prompt,让 AI 先自查一遍,再人工复核。

实战:从旧组件迁移到 Vue 3 + Vant 的具体步骤

JeeSite 移动端重构的技术选型是 Vue 3 + Vant 4(移动端 UI 组件库)+ Vite 构建。下面用一个真实场景演示怎么用免费 AI 工具完成单组件迁移。

第一步:准备上下文文件

创建一个 context.md,把项目约束写清楚,每次对话前投喂给 AI:

# JeeSite 移动端重构 - 上下文约束

## 技术栈
- Vue 3.4 + Composition API(必须用 <script setup>)
- Vant 4 组件库(按需引入,用 unplugin-vue-components 自动注册)
- Vite 5 构建
- TypeScript 严格模式

## 项目结构约定
- 页面组件放在 src/views/{模块名}/{页面名}.vue
- 公共组件放在 src/components/{组件名}.vue
- API 调用统一走 src/api/{模块名}.ts,内部用 axios 实例
- 路由定义在 src/router/modules/{模块名}.ts

## 代码风格
- 组件命名:PascalCase
- 事件命名:onXxx(如 onSubmit、onRefresh)
- CSS 用 scoped + BEM 命名
- 必须处理移动端安全区域(safe-area-inset)

## JeeSite 后端 API 规范
- 响应格式:{ result: { code: 0/1 }, data: {}, msg: "" }
- code=0 表示成功,code=1 表示业务异常
- 分页参数:pageNo, pageSize
- 分页响应:{ data: { list: [], count: 0 } }

第二步:用 AI 生成迁移组件

以"用户列表页"为例,把旧组件代码和迁移需求一起投喂:

# prompt_builder.py — 把上下文 + 旧代码 + 需求拼成完整 prompt
# 用法:python prompt_builder.py > prompt.txt,然后粘贴到 AI 对话框

import sys

def build_prompt(context_file: str, old_code_file: str, requirement: str) -> str:
    with open(context_file, "r", encoding="utf-8") as f:
        context = f.read()
    with open(old_code_file, "r", encoding="utf-8") as f:
        old_code = f.read()

    prompt = f"""你是一个前端重构工程师。请根据以下约束和旧代码,生成新的 Vue 3 组件。

## 项目约束
{context}

## 旧组件代码(Vue 2 + 自建 UI)
{old_code}

## 迁移需求
{requirement}

## 输出要求
1. 只输出一个完整的 .vue 文件内容,不要解释
2. 必须使用 <script setup lang="ts">
3. 必须用 Vant 4 组件替换旧自建 UI
4. 必须处理 JeeSite 后端 API 响应格式
5. 必须处理移动端安全区域
6. 在文件末尾用注释列出你做的关键改动点
"""
    return prompt

if __name__ == "__main__":
    # 示例:迁移用户列表页
    requirement = """
    - 旧页面用自建 Table 组件展示用户列表,迁移为 Vant List + PullRefresh
    - 旧页面分页用手工按钮,迁移为 Vant List 的无限滚动加载
    - 旧页面搜索用自建 Input,迁移为 Vant Search
    - 保留旧页面的所有业务逻辑(角色筛选、状态切换)
    """
    result = build_prompt("context.md", "old_user_list.vue", requirement)
    print(result)

运行方式:

# 1. 准备文件
echo '<旧组件代码内容>' > old_user_list.vue

# 2. 生成 prompt
python prompt_builder.py > prompt.txt

# 3. 把 prompt.txt 内容粘贴到免费 AI 工具(如 ChatGPT 免费版、Copilot 免费额度等)

# 4. 拿到 AI 输出后,保存为新组件
# 假设 AI 输出保存为 ai_output.vue
cp ai_output.vue src/views/user/UserList.vue

第三步:人工校验清单

AI 输出拿到后,不要直接用。按这个清单逐项检查:

# 1. TypeScript 类型检查
npx vue-tsc --noEmit src/views/user/UserList.vue

# 2. ESLint 规范检查
npx eslint src/views/user/UserList.vue --fix

# 3. 运行时验证 — 启动开发服务器,手动测试
npm run dev
# 在浏览器打开对应路由,验证:
#   - 列表加载和无限滚动是否正常
#   - 下拉刷新是否触发
#   - 搜索筛选是否联动
#   - 安全区域底部是否留白

# 4. 风格一致性 — 对比已有组件的写法
# 检查命名、事件处理、CSS BEM 是否与项目其他文件一致

多端兼容的一次性收口策略

旧架构的多端兼容靠逐个 hack,新架构用两条规则统一解决:

规则一:CSS 安全区域 + 响应式断点统一声明

src/styles/mobile-base.scss 中一次性定义:

// mobile-base.scss — 全局移动端基础样式
// 安全区域:处理 iOS 底部 Home 指示条和 Android 系统导航栏
.safe-area-bottom {
  padding-bottom: constant(safe-area-inset-bottom); // iOS < 11.2
  padding-bottom: env(safe-area-inset-bottom);       // iOS >= 11.2
}

.safe-area-top {
  padding-top: constant(safe-area-inset-top);
  padding-top: env(safe-area-inset-top);
}

// 响应式断点:统一管理,禁止各组件自行写 media query
$breakpoints: (
  sm: 375px,   // 小屏手机
  md: 414px,   // 标准手机
  lg: 768px,   // 平板竖屏
  xl: 1024px,  // 平板横屏 / 小桌面
);

@mixin respond-to($bp) {
  @if map-has-key($breakpoints, $bp) {
    @media (min-width: map-get($breakpoints, $bp)) {
      @content;
    }
  } @else {
    @warn "Unknown breakpoint: `#{$bp}`";
  }
}

// 使用示例(组件中不要直接写 media query)
// .user-card {
//   width: 100%;
//   @include respond-to(md) {
//     width: 50%;
//   }
// }

规则二:Vant 组件的 ConfigProvider 全局配置

<!-- App.vue — 全局 Vant 配置,统一多端行为 -->
<script setup lang="ts">
import { ConfigProvider } from 'vant'

// 统一主题变量,覆盖 Vant 默认值以适配 JeeSite 设计规范
const themeVars = {
  // 主色跟随 JeeSite 品牌
  '--van-primary-color': '#1890ff',
  // 安全区域补偿
  '--van-tabbar-height': '50px + env(safe-area-inset-bottom)',
  // 圆角统一为 8px(JeeSite 规范)
  '--van-border-radius-lg': '8px',
  // 字体大小基准适配移动端
  '--van-font-size-md': '14px',
}
</script>

<template>
  <ConfigProvider :theme-vars="themeVars">
    <router-view />
  </ConfigProvider>
</template>

这两条规则落地后,后续所有新页面只需引用 mobile-base.scss 的 mixin 和遵循 ConfigProvider 的主题,不再需要单独处理兼容问题。

构建链路的升级要点

旧构建不支持热更新和按需加载,新架构用 Vite 替换。关键配置:

// vite.config.ts — JeeSite 移动端构建配置
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import Components from 'unplugin-vue-components/vite'
import { VantResolver } from 'unplugin-vue-components/resolvers'

export default defineConfig({
  plugins: [
    vue(),
    // Vant 按需自动引入——无需手动 import 每个组件
    Components({
      resolvers: [VantResolver()],
    }),
  ],
  server: {
    host: '0.0.0.0',  // 手机真机调试时需要局域网访问
    port: 5173,
  },
  build: {
    // 移动端分包策略——按路由模块拆 chunk
    rollupOptions: {
      output: {
        manualChunks(id) {
          if (id.includes('src/views')) {
            // 每个模块一个 chunk,首屏只加载当前路由
            const match = id.match(/src\/views\/([^/]+)/)
            return match ? `view-${match[1]}` : undefined
          }
          if (id.includes('vant')) {
            return 'vendor-vant'
          }
        },
      },
    },
    // 移动端对包体积更敏感,压缩更激进
    minify: 'terser',
    terserOptions: {
      compress: {
        drop_console: true,   // 生产环境去掉 console
        drop_debugger: true,
      },
    },
  },
})

零成本 AI 工作流的适用边界与取舍

这套方法确实能显著提速,但有几个边界需要正视:

维度 免费 AI 能做好 免费 AI 做不好或需要额外人工
单组件迁移 上下文充足时,输出可用率 70-80% 跨组件状态联动、复杂生命周期逻辑
API 适配层 格式转换、错误处理封装 需要理解后端业务语义的接口设计
CSS 响应式 断点规则、安全区域处理 动画细节、品牌设计微调
构建配置 基础 Vite 配置、分包策略 与 JeeSite 后端联调的代理规则、环境变量管理
测试 生成单元测试骨架 E2E 测试场景设计、真机兼容验证

取舍建议

  • 把 AI 输出定位为"80% 的骨架 + 20% 的精修",不要期望直接产出最终代码。
  • 复杂业务逻辑(权限控制、数据流转)先人工写好伪代码,再让 AI 翻译成正式实现——比让 AI 从零设计业务逻辑可靠得多。
  • 每次迁移一个模块后,立即跑一遍完整的功能验证,不要攒到最后统一测——免费 AI 的错误模式往往有规律,早发现可以调整 prompt 策略。

迁移执行清单

如果你也要对 JeeSite 移动端或其他类似项目做重构,按这个顺序推进:

## 移动端重构执行清单

### 准备阶段
- [ ] 整理项目约束文档(框架版本、组件库、API 规范、代码风格)
- [ ] 列出所有旧页面清单,按业务优先级排序
- [ ] 搭建新架构脚手架:Vue 3 + Vite + Vant + TypeScript
- [ ] 配置 Vite 构建和 Vant 按需引入
- [ ] 写好 mobile-base.scss 和 ConfigProvider 全局配置

### 迁移阶段(逐页面推进)
- [ ] 选一个低复杂度页面做试点(如列表页),跑通完整流程
- [ ] 用 prompt_builder 投喂上下文 + 旧代码 + 需求,生成新组件
- [ ] 人工校验:类型检查 → lint → 运行时验证 → 风格一致性
- [ ] 记录 AI 输出的错误模式,调整 prompt 策略
- [ ] 逐个迁移剩余页面,每迁移 3-5 个页面做一次集成验证

### 收口阶段
- [ ] 全量 E2E 测试(重点:多端真机验证)
- [ ] 性能对比:首屏加载时间、包体积、交互响应时间
- [ ] 清理旧架构代码和依赖
- [ ] 更新团队开发文档和组件使用规范

免费 AI 工具不是万能的,但也不是无用的。关键在于:你是否愿意花时间把上下文喂清楚、把任务拆到位、把校验做扎实。这套工作流的核心投入不是钱,而是工程纪律。


相关推荐