工程提速,Vue3项目开发的小巧思
2026-04-18 03:38:55

最近在用AI重构之前的一个开源的vue3的后台管理项目,前端框架大家大概很熟悉,就是Ruoyi版本的Vue3。

这种重构优化,在以前的话,是我一个人想都不敢想的脏活,现在配合AI,在下班时候看着电影就能做完。

真是时代的伟力,AI,太伟大了。

正文

在正式开始之前,我先说一下我为什么要优化这个项目的背景。

项目背景

  1. 我需要一个后端管理系统来做一些个人性质的项目,预算成本不高
  2. 我的技术不够硬,不是一个正经的JAVA+WEB性质的全栈工程师,平日主前端开发
  3. AI发展很迅猛,我需要一个前后端都能搞定的项目
  4. 技术栈通用,前后端我一个人能排查搞得定,且生态要相对还行的那种
  5. 项目要足够的轻量,如果项目写的太配置化,太复杂,对大项目确实很友好,但对我这种个人性质的小项目就显得很繁琐。

一,我不是一个正经的全栈工程师。

我的技术栈不够广,在国内现在这个的大背景下,我不是JAVA的WEB的全栈工程师,很尴尬。

关于JAVA,我只能简单的写写接口,深层的内容我是一点也弄不明白,很纯粹的码农。

而且,公司一向都是前后端泾渭分明,职场上,你越界贸然做其他人的活总归是不好的。同时,做的越多,背锅越多。

综上,我对JAVA的学习动力本质上是没那么足的。

二,我个人的预算配置不够

JAVA的项目都很重,部署到服务器上,这项目会很吃服务器资源。

正常来说,为了运行一个常规的SpringBoot的后端(例如若依),4C4G的服务器会比较稳定一些,这个成本不低。

而且,有很多事情上,如果JAVA出问题了,我作为一个技术面不足的人没法顶上,人力成本不够,就算我愿意花时间和精力去学,无法快速迭代出一个可见品,这个收益不如去卷前端技术(虽然现在也没什么必要了)。

但是,我又确实有些东西需要服务端来做,于是经过一段时间选型之后,最终选定了NestJS来作为后端的框架。

三,AI发展迅猛

一年前的时候,我知道有cursor,也体验过各类智能编辑器开发,但实际开发体验中总是差点意思。

而且因为工作原因,加上我工作环境的原因,我在正式环境上使用相关技术用的还是很保守的。

一直到年后,公司提供了免费token之后,不是自己的自行车那我肯定猛猛蹬,现在用起来根本不心疼,库库用。

在这个过程中也逐渐有了些心得,用来干脏活效果好了很多,所以我也有这个精力和时间成本去学习其他的技术,而且干活的时候不耽误我看电影。

在优化这个开源项目的时候,几乎是一边看着电影,一边做优化的,我就只需要确定大概走向之后,点点确认就可以了。

优化路线

目前主要是对前端项目做了优化,主要原因是这个前端用的太Vue2了。

我参考了市面上其他的开源项目,如Vben,之类的,不得不感叹,还是开源社区大佬多。

  1. 起用vite8对项目构建和打包,优化相关打包配置,更快更稳。
  2. 引入autoImport来构建项目,让项目引入工具TS更简单。
  3. 项目使用TS重构,让代码更易读
  4. 引入zod库来判断,让判断更语义化,更清晰。
  5. 采用最新版本的Vue3,能用更多的新特性
  6. 优化数据字典的获取,一次性获取全局的数据字典,避免页面重复调用接口

接下来我会挨个说明为什么要在项目中做这些优化。

Vite8构建与打包

  1. 项目打包速度从50s提升到15s左右
  2. 项目本地开发构建,从1s左右的等待时间到几乎秒开
  3. Vite8统一了打包和开发构建的方式,不会出现前后端在开发和正式环境不一致的情况(虽然原本也极少)
  4. 配置方式略作修改,和之前的配置会稍微有点不一样,这里需要略作修改

对于没有历史包袱的项目,我个人非常推荐Vite8,这一手打包构建的速度真的很快。

AutoImport自动引入

自动导入这个工具是为了解决vue3的项目中,同文件内需要手动引入,代码书写繁琐的问题。

每次在页面内,你需要手动引入ref,reactive,引入一堆vue的基础函数,同时还得手动引入一堆组合式函数。这样的开发体验,写不了几次页面,相信我,你会变得极为烦躁。

在此之前,若依的前端用的是proxy代理,这种方式还是vue2时代的都挂在this上的思维,虽然也没错,但是用起来真的很丑陋。

用AutoImport之后,就省了太多事了,AutoImport会将那些需要手动引入的东西都自己挂上,不需要你手动引入了。

TypeScript重构

TS在前端的使用,我直到如今也还是有点抵触的,我自己使用过后也是觉得不错,尤其是在Nest后端项目中。

但在前端项目中的使用,我相对的来说较为克制的。

这段我说的会啰嗦一点,因为我得先说明白我具体要用TS在项目中解决的问题,然后是我需要根据我实际遇到的问题来对症下药。

诚然,TS确实有很多优势,我根据自己的开发体验,可以说出最优秀的两点。

  1. 优秀的代码提示,让开发人员在开发中不用费事去翻查文档和方法源文件,使用的时候节省了很多查看时间
  2. VITE对TS的支持,让项目更快更方便,通过新版的构建方式,让项目冷启动和打包更快,这个快是肉眼可见的感受到的

但在实际开发过程中,在AI还没有非常盛行的时代,TS引出来的痛点还是有的,我可以结合我实际开发中遇到的体验,简单说一下。

  1. TS的类型提示书写占用时间,大工程里可以通过人员责任分割来解决,可以刷熟练度来解决,但不能否认的一点,这就是为了省读代码的时间而增加了写代码的时间,客观上还是力大砖飞的加人力来解决的。
  2. TS如何应对需求变动,频繁变动的项目需求会让你写TS的心力被消磨的一干二净,你想写一套清晰好用的类型检测,让方法调用变得优雅,但频繁变动的需求和工期让你不得不变成AnyScript,最后只是让代码变成了多了很多any的JS,项目代码阅读困难的问题依然没有解决。

在23年,TS还是社区宠儿的时候,所有人针对上边的问题就是一个答案:菜就多练。

所有的回答都指向一点,你没用好那是你的问题,从来不限定边界,不说具体场景,不说在什么时候用,不说怎么用怎么解决,你只要用就会好起来的。怎样的工程化体验会变好?不说,你要怎样在项目中应用TS为工程开发提速?不说,藏着。

反正最后所有的回答都最后转向了一句话:菜就多练,怎么练?不说,就是菜就多练,不会TS就是跟不上时代。

一般遇到这样的回答,那基本上就没法交流了,这明显就是犯了软件开发中银弹理论错误问题,把TS当做能解决一切问题的“银弹”了。

以前我没法回应这种问题,因为我开发的TS项目不多,但是我明显的感觉到TS在公司开发的前端项目中拉屎太多,团队的工程化体验极差。

这种问题在急着赶项目的时候尤为明显,TS不仅没有节约工时,反而增加了审查和排错的工时。

这固然有开发人员开发能力的问题,但作为工程师,你是要解决问题的人,不是制造问题的人。

是否取用TS,一旦确定选型之后,你会遇到如下的一些问题:

  1. 我写类型检测的意义是为了什么?是为了解决什么痛点?我的项目中真的有这个痛点吗?这个痛点值得我用这个人力成本去覆盖吗?
  2. 到底要在什么地方使用TS类型检测?hooks?接口?utils工具类?
  3. 全面TS化,是否意味着项目中的所有方法都要用TS认真写一遍所有的方法,让每个方法的引用都卡的很死?

而在现在这个AI的时代,我通过这两个月的在AI项目中的辅助开发,我想我大概可以回答这个问题。

  1. 使用TS的意义是为了在方法调用的时候更方便阅读代码,前端代码提示不充分这点,通过使用TS可以解决。
  2. 使用TS通过现代化的打包工具,能让项目冷启动更快,打包更快
  3. 项目中真的有代码阅读这个痛点,React项目中的hooks和Vue3项目中组合式函数一旦写多了,都会面临读代码麻烦的问题。
  4. 人力成本被AI填上了,你只需要简单做做TS的类型体操,了解一下TS是怎么用的,剩下的脏活交给AI去做就可以
  5. TS类型检测一般用在稳定的工具类方法,比如utils和hooks,如果不涉及需求不稳定的业务,我非常推荐TS。
  6. 全面TS化之后,不一定要全面强检测,尤其是接口这一类涉及业务的。接口这东西,一般都不会很稳定,如果后端能生成一个不错的文档,那就没必要上强检测,这种上检测无非就是给后端擦屁股。
  7. NodeJS写的服务端项目,如果你不用TS,我会用拳头打死你,用咏春。

这是我基于个人的小项目的思考,TS不全面铺开检测这点,不适用于大项目,大项目多数是用人力去解决成本问题。

另外,历史包袱很重的项目也不推荐用TS,因为TS重构之后的出现的问题,相对于耗费的人力成本来讲,这不是一笔划算的账目。

AI协同优化

结语

参考