Skip to main content

技术选型

技术选型是项目的地基决策,选错了后期改造成本极高。原则:业务为出发点,而不是为了用新技术而用。

选型清单

  • 框架:React / Vue / ...
  • 语言:TypeScript(强推) / JavaScript
  • 构建工具:Vite / webpack5 / ...
  • 包管理器:pnpm / yarn / npm
  • 路由:react-router v6 / vue-router v4
  • 状态管理:Redux / MobX / Zustand / Pinia
  • UI 库:Ant Design / Element Plus / ...
  • 请求库:axios + 二次封装
  • 工具库:lodash / ahooks / ...
  • 样式方案:less + css module / styled-components
  • 代码规范:ESLint + Prettier + Stylelint
  • 提交规范:Husky + lint-staged + Commitlint
  • 测试:Jest + React Testing Library
  • CI/CD:GitHub Actions / Jenkins

一、选型考虑维度

维度关注点
团队人力成本、上手成本、现有技术栈储备
业务SEO、性能、跨端、交互复杂度
生态社区活跃度、第三方库丰富度、招聘市场
兼容浏览器/Node 版本、SSR/SSG、移动端
长期维护方稳定性(库是否还在维护)、迁移成本

小团队尽量统一技术栈,降低协作成本。选 1-2 个主语言、1 个 UI 库、1 个状态管理。

二、框架

框架是地基决策,后期迁移成本极高。

框架生态学习曲线适用
React最丰富(国内稍弱于 Vue)通用首选,海外项目 / 大型应用
Vue国内最丰富国内中小团队首选,上手快
Svelte极致性能、编译时优化
SolidJS接近 React 的开发体验 + 极致性能

选型建议:国内业务优先 Vue,中后台/海外优先 React。Svelte / SolidJS 是"小而美"的选择,生态和招聘是硬伤,慎用于生产。

三、渲染模式

模式适用优点缺点
SPA后台类、复杂交互体验流畅、前后端分离首屏慢、不利于 SEO
MPA活动页、零散页面简单、隔离性好切换体验差
SSR内容站、电商、SEO 重首屏快、SEO 友好服务端成本、复杂度高
SSG文档、博客极快、托管便宜不适合实时数据
ISR / Streaming SSR大型应用SSR + 静态化优点兼具框架支持有限

参考 SPA vs MPA

三、构建工具

工具语言适用特点
ViteGo (dev) + Rollup (prod)新项目首选启动 < 1s、原生 ESM
webpack 5JS老项目、大型工程生态最丰富、配置复杂
RollupJS类库开发产物干净、tree-shaking 友好
esbuildGo速度敏感场景极快但 API 简单
SWCRust替换 babel/tsc速度比 babel 快 5~10x
TurbopackRustNext.js 生态还在迭代中
RspackRustwebpack 替代API 兼容 webpack,迁移成本低

选型建议:新项目 → Vite已有 webpack 项目保持 + 局部 swc 加速类库 → Rollup

四、状态管理

方案适用特点
Context简单全局、主题、localeReact 原生,性能一般
Redux大型、复杂业务、需时间旅行模板代码多、生态完备
MobX响应式偏好、OOP 风格代码少、基于 Proxy 自动追踪
Zustand中小型项目轻量、hooks 风格、3KB
Jotai原子化状态适合细粒度更新
Valtio简化 MobXProxy + immutable
XState复杂状态机状态可视化、测试友好

现代项目首选 Zustand / Jotai,复杂业务再用 Redux/MobX。

五、UI 组件库

框架主流 UI 库
ReactAnt Design、Material UI、Chakra UI、shadcn/ui
VueElement Plus、Naive UI、Ant Design Vue
跨端TDesign(腾讯)、Arco Design(字节)

按需引入:babel-plugin-importunplugin-vue-componentsvite-plugin-style-import

六、微前端

方案特点适用
iframe隔离最彻底嵌入式页面、老系统迁移
single-spa最早的微前端框架学习成本略高
qiankun基于 single-spa,国内最流行多技术栈共存
Module Federationwebpack5 原生构建期共享模块
micro-app / wujie基于 web components接入简单、京东方案
Vite Plugin FederationVite 生态现代化选择

与 npm 包区别:npm 包是编译时共享(强耦合、性能最优),MF 是运行时共享模块(独立发版、配置复杂),微前端框架是整应用级运行时隔离(完全异构、基础设施重)。优先用 npm 私有包 / monorepo,有独立部署诉求再上 MF,最后才考虑微前端框架

八、其他

类型系统

  • TypeScript:现代前端必备

包管理

  • pnpm:推荐,节省磁盘、安装快
  • yarn / npm:兼容性好

跨端

  • React Native / Expo:移动端
  • Flutter:移动端
  • Taro / uni-app:国内小程序
  • Electron / Tauri:桌面端
  • PWA:轻量级移动端方案

九、选型 checklist

  • 业务场景是否真的需要这个技术?(KISS 原则)
  • 团队有足够的学习时间吗?
  • 社区活跃、最近一次发版在 6 个月内?
  • 性能数据是否有 benchmark 支撑?
  • 退出成本如何?是否容易迁移?

十、面试高频

  • Q:为什么选 Vite 而不是 webpack? A:Vite 利用浏览器原生 ESM,开发时按需编译,启动 < 1s;生产用 Rollup 产物质量有保障。webpack 配置生态成熟,但启动慢。
  • Q:什么时候用 Redux,什么时候用 Zustand? A:多人协作的大型项目、复杂异步流、需要时间旅行调试 → Redux;中小项目、追求简洁 → Zustand。Redux 模板代码多,新项目不建议直接上。
  • Q:微前端的代价? A:基础设施成本(qiankun、Module Federation 都需要改构建)、调试复杂度上升、版本管理混乱。除非真的需要多团队独立交付,否则谨慎使用。