我用3个周末重构了公司的前端项目,老板没发现,但同事都来找我要代码了

先声明:重构是在业务空窗期做的,没耽误正常迭代。别学我偷偷干,最好提前报备。

公司项目是个3年前的Vue2后台系统,代码量不大(50多个页面),但"历史悠久"------经历了4任前端,风格各异,没有TypeScript,没有组件库规范,console.log满天飞。

我花了3个周末(周五晚上+周六全天),把它升级到了Vue3 + TS + Vite。不是炫技,是真的被折磨够了。

第一周:搭骨架,解决"能跑"的问题

先用@vue/cli的迁移工具跑了一遍,发现只能解决30%的问题。剩下的手动改:

  1. Options API → Composition API:这个最痛苦。有些组件逻辑散落在data、computed、methods里,重构时要先理清楚逻辑关系。我的策略是:先不改逻辑,只改写法,保证行为一致。
  2. Vue Router 3 → 4 :主要是router.addRoutes被废弃了,改成router.addRoute。还有导航守卫的写法有变化,但不大。
  3. Vuex → Pinia:这个反而是最爽的。Pinia的TypeScript支持好太多,不用写那么多类型声明。

周末两天改了20个页面,周一来公司测试,发现有个页面的表单提交后没反应。调试了半天,发现是v-model在Vue3里的默认行为变了------.sync修饰符被移除,我漏改了一个地方。

教训:迁移指南要逐条核对,不能凭记忆。

第二周:上TypeScript,解决"靠谱"的问题

Vue3对TS的支持好了很多,但还是有坑:

  1. defineComponent的props类型 :我习惯用接口定义props,但发现如果接口里有可选属性,模板里用的时候会报错。最后改成用PropType显式声明,或者直接用withDefaults。
  2. ref的泛型推导 :ref(null)默认推导成Ref<null>,如果后面赋值对象会报错。必须显式写ref< User | null>(null)。
  3. 第三方库的类型 :有些老库没有@types,要自己写.d.ts。我攒了一个shims-custom.d.ts,专门放这些。

最爽的时刻:改完后IDE的自动提示终于正常了,之前写代码像瞎子摸象,现在像开了天眼。

第三周:工程化优化,解决"好维护"的问题

  1. ESLint + Prettier + Husky:以前代码风格看当天心情,现在提交前自动格式化。我配了个比较宽松的规则,太严格会打击积极性。
  2. 组件自动导入 :用unplugin-vue-components,不用手动import组件。但要注意,如果组件名冲突(比如自定义的Button和Element Plus的Button),要显式指定。
  3. 环境变量管理 :把开发、测试、生产的API地址、埋点key都抽出来,用.env文件管理。以前这些硬编码在代码里,改一次发一版,现在改配置就行。

同事为什么来找我要代码?

重构完第二周,隔壁组也要升级Vue3,他们组长直接来拷贝我的配置。我说:"其实掘金上有更好的方案..." 他说:"你的能跑,我就要你的。"

真实。

重构的价值,不是技术多先进,是"能落地"

我现在觉得,前端工程化的最佳实践,不是用最新技术,是让团队里水平最差的人也能写出合格的代码。ESLint是防呆的,TypeScript是防错的,自动化工具是省时间的。

最后贴一下我的package.json关键依赖版本(供参考):

JSON

json 复制代码
{
  "vue": "^3.4.0",
  "vite": "^5.0.0",
  "typescript": "^5.3.0",
  "pinia": "^2.1.0",
  "vue-router": "^4.2.0"
}

想问问大家:

你们公司的项目是什么技术栈?有没有也在考虑升级Vue3的?或者已经踩过坑的,欢迎分享,我帮你避雷。

相关推荐
拖孩1 小时前
AI 帮我写的小程序「厨菜记」上线满月了,挣了两百块!!!
前端·后端·微信小程序
用户360055579001 小时前
Kestrel_VLLM - 13 · 为什么排除 MoE FFN Tiling 与 Tensor Core
前端
Hilaku1 小时前
AI 流式输出都用 SSE,什么时候必须换 WebSocket?
前端·javascript·程序员
奇牙coding1 小时前
Codex CLI 升级后多文件编辑静默失效:config.yaml 枚举变更排查与修复指南
java·前端·javascript·ai
小羊没烦恼!2 小时前
Ajax与JSON的一些总结
android·java·前端·数据库·mysql·算法·okhttp
程序员老赵2 小时前
Docker 部署 Filestash:轻松搭建浏览器文件管理平台
前端·docker·开源
夏天要喝冰可乐2 小时前
给 23 万字修仙小说造个阅读站:浏览器内打包 EPUB 分页阅读 + 三主题实战
前端·产品·全栈
茶底世界之下2 小时前
林间步道要不要加暗角?用 Awaking 把强度收在20%
前端·ios·图片资源
执子念的飞鱼2 小时前
纯前端预览 275 种文件格式是怎么做到的
前端·vue.js·react.js
行者全栈架构师2 小时前
【鸿蒙心迹】互动卡片全链路——把核心功能放到桌面(FormKit 实战)(HarmonyOS 7.x)
前端·算法·架构