三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

主流前端技术分层选型

主流前端技术分层选型

一、当下企业主流前端技术分层选型(分3套主流方案)

方案1:Vue3 + TypeScript

核心栈

  1. 框架:Vue3(组合式API +<script setup>
  2. 语言:TypeScript(强制类型,团队项目标配)
  3. 构建工具:Vite(替代老Webpack,启动/打包极快)
  4. UI组件库:Element Plus / Arco Design Vue / NaiveUI(后台管理)
  5. 路由:Vue Router
  6. 状态管理:Pinia(替代Vuex)
  7. HTTP请求:Axios
  8. 样式:SCSS / Less
  9. 图标:lucide-vue-next / Element Plus内置图标

适用场景

后台管理系统、RAG知识库、OA、ERP、内部工具页面;学习成本低、生态完善、国内企业需求量最大。

方案2:React + TypeScript(大厂、ToC网站、复杂大屏)

核心栈

React18 + TS + Vite/Webpack + Ant Design Pro + Zustand/Redux
适用:电商、官网、复杂可视化、金融平台、互联网大厂项目。

方案3:原生轻量(小型静态页面、简单工具)

Vanilla TS + Vite,不使用Vue/React任何框架,无组件库。

补充新兴全栈框架(开箱即用,新项目越来越多)

  • Nuxt3:Vue官方全栈框架(Vue3+TS+Vite内置,SSR/静态站点)
  • Next.js:React官方全栈框架
  • UniApp:Vue3多端(一套代码跑网页、小程序、APP)

二、为什么现在企业基本都强制 TS + Vue3

1. 不用TS(纯JS)的痛点

JS动态弱类型,多人协作极易出隐性bug:传错参数、对象字段不存在,只有运行页面才报错,大型项目维护灾难。

2. TS带来的收益

  1. 编码阶段编辑器静态校验,写错直接红线提示;
  2. 接口返回数据、表单、用户信息可以定义接口类型;
  3. 代码提示、自动补全大幅提升开发效率;
  4. 重构代码、多人协作更安全,中大型项目刚需。

3. Vue2 逐步淘汰

Vue2无原生TS友好支持,生命周期写法繁琐,新项目全部 Vue3 +<script setup lang="ts">

三、一套标准后台管理完整技术选型(对标你现在写的RAG前端)

  1. 构建:Vite
  2. 核心框架:Vue3
  3. 语言:TypeScript
  4. UI库:Element Plus
  5. 路由:vue-router@4
  6. 状态管理:pinia
  7. 请求封装:axios
  8. 样式预处理器:sass
  9. 图标:lucide-vue-next
  10. 测试:vitest + jsdom
  11. 代码规范:ESLint + Prettier

和你本地 package.json 完全匹配,属于标准企业后台技术栈。

四、简单对比:Vue vs React,怎么选

维度Vue3+TSReact+TS
上手难度低,模板语法贴近HTML偏高,JSX语法
国内岗位多,外包/政企后台主流大厂、互联网、ToC产品
后台组件生态Element Plus、Arco成熟好用Ant Design
适用人群新手、后端转前端、管理系统开发深耕前端、复杂交互、可视化

五、总结

  1. 国内最流行、最通用的前端组合确实是 Vue3 + TypeScript + Vite,后台管理系统几乎全是这套;
  2. TS已经不是可选,是企业项目硬性标准,只有个人极小demo会用纯JS;
  3. 如果做面向用户的网站、大厂业务,主流是 React + TS;
  4. 如果要做小程序、APP多端,选 UniApp(Vue3+TS);
  5. 传统老项目还存在 Vue2 + JS,新项目不再使用。

补充:JS VS TS

所有合法 JS 代码,在 TS 里都能直接运行

你写任意原生 JS 语法:var/let/const、箭头函数、解构、async/await、数组方法、class、Promise……放到.ts文件完全没问题,不需要改动。

// 纯JS写法,TS完全兼容functionhello(){console.log("hi")}hello()

哪怕完全不写任何类型注解,TS 文件等价于 JS 文件。

TS 在 JS 基础上新增了独有的语法(JS 不认识,编译后会删掉)

这部分语法只用于开发阶段做类型校验,打包编译后会全部移除,浏览器最终拿到的只有标准 JS。

TS 独有语法举例

  1. 类型注解
letn:number=1functionsum(a:number,b:number):number{returna+b}
  1. interface/type定义数据结构
interfaceUser{id:numbername:string}typeStatus=0|1|2
  1. 泛型<T>
functiongetData<T>(data:T):T{returndata}
  1. 枚举enum
enumGender{Male=1,Female=2}
  1. 类型操作符:?可选属性、!非空断言、readonlyas类型断言
interfaceUser{id:numbernick?:string// ? 可选,JS没有}constname=obj.nick!// ! 非空断言constdata=resasUser// as 强制类型转换

反过来:有些写法 TS 会限制,JS 允许

JS 是弱类型,随便赋值不会报错;TS 会校验类型是否匹配,不匹配直接红线:

letnum:number=1num="abc"// JS 合法,TS 直接报错

不是语法不一样,是多了一层静态校验规则

一句话总结

  1. JS 全部语法 TS 100% 兼容,JS 能写的 TS 都能写;
  2. TS 额外新增一套仅类型相关的语法,JS 不存在;
  3. TS 独有语法不会出现在线上打包后的 JS 文件,编译时会被清除;
  4. TS 多了静态类型检查规则,会拦截 JS 中合法但容易出bug的写法。
← 返回列表