分享一下我的技术转型之路从纯前端到 AI 全栈 😍😍😍
刚入行时,我只是一个只会写 React 组件的前端开发,主要精力都放在页面和交互上。一路走来,我先补齐了工程化、后端和基础设施,再走到现在以 AI 应用为核心的全栈方向,中间踩过不少坑,也绕了不少弯路。现在想系统梳理一下这条「从纯前端到 AI 全栈」的转型路线,以及一路沉淀下来的技术栈,希望能给正在做类似转型的同学一些参考。
React
React 是我前端的起点。当时在 Boss 直聘上看大厂招聘,前端岗大多要求 React,Vue 相对较少,于是我选择了 React。入门时以为前端就是写页面、调接口,工作后才发现水很深。现在回头看,这个选择没问题:技术主流、生态丰富、就业机会多,而且组件化、虚拟 DOM、单向数据流这些设计思想对前端开发影响深远。
我特别喜欢组件化思维,一个组件只做一件事,复用和维护都很轻松。配合 TypeScript 使用,类型安全带来的收益在大型项目中尤为明显。日常开发中,使用 useState、useEffect、useMemo、useCallback 等 Hooks 管理状态,合理运用 useMemo 和 useCallback 能明显减少不必要的重渲染。
找工作前我就开始研究 React 源码,因为只会写业务代码的简历没什么亮点。Fiber 架构、调度器、协调算法一开始都很抽象,但坚持学习后对虚拟 DOM、diff 算法、Fiber 机制有了清晰的理解,写代码和面试时都更有底气。
之后用 React 做了一个在线代码编辑器:Monaco Editor 负责编辑功能(语法高亮、代码补全、错误提示),Yjs + WebSocket 实现协同编辑。Yjs 是一个 CRDT 框架,用于解决多人编辑冲突。这块我踩过不少坑,把 CRDT 原理摸清楚之后协同功能才真正稳定下来。这个项目让我对 WebContainer、Yjs 和前端工程化有了更深的理解。
还有一个数据可视化平台项目,使用 React + TypeScript 结合 Elasticsearch 实现搜索功能,在这个项目中学会了全文检索和大数据量渲染的优化技巧。
前端工程化
从创建、构建到部署,工程化整条链路做脚手架时都跑过一遍。
![]()
这是我目前写的内容,后续再丰富更多!
前端脚手架
用 Node.js 开发了一个前端脚手架,初衷是每次新建项目都要配置 webpack、eslint、prettier、typescript,而 create-react-app、create-vite 又相对黑盒。我开发的这个脚手架支持按需选择技术栈:React 或 Vue、webpack 或 vite、是否使用 TypeScript、ESLint、Prettier 等。
实现过程中涉及文件操作、模板渲染、命令行交互等,采用插件化架构,每个技术栈对应一个插件,可以灵活组合。从命令解析、参数处理到文件生成、重名和目录等边界情况的处理,整个初始化流程跑通之后,对前端工程化的理解深入了很多。
CI、CD
开发脚手架时用 GitHub Actions 搭建 CI/CD 流程:代码提交后自动运行 ESLint、类型检查、单元测试,全部通过才进行构建;构建成功后自动部署,npm 包可以自动发版。核心思路是将从代码提交到上线的整个流程自动化,环境变量和密钥需要单独妥善处理。一开始踩过构建、部署失败的坑,后来把每一步的逻辑理清之后就顺畅了。
服务器部署
转全栈后开始接触服务器部署:云服务器(阿里云、腾讯云,中小项目 2 核 4G 够用)、SSH 连接、环境变量配置、Node.js、Nginx、Docker 等技术,权限和端口配置这些一开始容易踩坑。Nginx 用于反向代理和负载均衡,通过 location 区分静态资源和 API 请求,负载均衡策略有轮询、权重、IP 哈希等;HTTPS 使用 certbot 申请和自动续期证书,并配置 HTTP 到 HTTPS 的重定向;DNS 解析到服务器,需要上 CDN 的话再配置 CDN 的 DNS。
部署流程使用 GitHub Actions 自动化:构建完成后通过 SSH 连接服务器执行部署脚本(停止旧服务、备份、部署新版本、启动服务)。早期经常遇到服务启动失败、数据库连接不上等问题,改用 Docker 和 Docker Compose 之后环境保持一致,问题减少了很多。服务上线后配合 Prometheus、Grafana 或云厂商的监控工具,监控 CPU、内存、接口延时、错误率等指标。
NPM 发包
开发脚手架时顺带学习了 npm 包发布:语义化版本管理、package.json 中的 name、version、main、types、files 等字段都要正确填写,发布前本地和 CI 都要测试通过,npm publish 前需要注意登录状态和权限配置,版本号冲突、包名冲突都踩过坑。后来使用 changeset 工具:每次改动写一个 changeset 文件描述影响范围,发布时自动计算版本号、生成 changelog、打 tag,整个流程规范了很多。
webpack 和 vite
webpack 功能强大、配置灵活,但上手成本较高,插件众多,需要搞清楚每个配置项的作用;vite 开发体验更好、启动速度快,但生态相对还弱一些。在脚手架中两种构建工具都支持,可以根据项目需求选择。
ESLint 和 Prettier
ESLint 用于管理代码语法、风格和潜在问题,根据 React、TypeScript 等技术栈选择对应的规则集并接入编辑器;Prettier 用于统一代码格式化。在脚手架中这些都是可选配置项,方便根据团队规范定制。
Jest 和 Vitest
Jest 生态成熟、社区资源丰富,但配置需要花一些时间;Vitest 基于 Vite,运行速度快、开发体验好,但生态还在发展中。脚手架中两种测试方案都支持可选。
前端性能指标
性能优化前需要先进行衡量。Core Web Vitals(LCP、FID、CLS)直接反映了页面的加载速度、交互响应和视觉稳定性,也是 SEO 的重点关注指标;此外还有 FCP、TTFB、TTI、TBT、INP、Speed Index 等指标。可以使用 Performance API 或浏览器开发者工具进行测量,我主要关注 Core Web Vitals。
性能优化
长时间运行的任务使用 Web Workers 或 requestIdleCallback 拆分到后台执行;通过火焰图定位性能瓶颈;动画优先使用 requestAnimationFrame 而不是 setTimeout;使用 Performance Observer 监控页面卡顿(通常与 JS 执行、DOM 操作、内存使用相关)。DOM 操作要尽量减少、批量更新、采用事件委托;缓存策略善用 Cache-Control、Last-Modified 和 ETag;CDN 配置好缓存策略和回源规则;白屏问题用 Performance API 或错误监控工具捕获,再排查资源加载、JS 执行、网络请求等。对浏览器渲染流程、事件循环、内存管理有清晰的认知,性能优化会更有方向感。
通过开发脚手架,把从项目创建、代码构建、质量检查、自动化测试到线上部署的整条链路完整跑了一遍,对前端工程化有了比较全面的认识。
Next.js
Next.js 是我最近使用较多的全栈框架。它的服务端渲染、静态生成、API 路由等功能在实际项目中非常实用。特别是对于 SEO 要求高的项目,Next.js 的优势尤为明显。
DocFlow 项目实践
用 Next.js 做了 DocFlow,基于 Tiptap 的协同文档编辑器。
![]()
前后端都使用 Next.js,通过 API 路由实现文档保存和用户鉴权;协同编辑功能使用 Yjs + @hocuspocus/provider,和之前的编辑器项目类似,把 CRDT 原理搞懂后协同功能才真正稳定。采用文件路由、前后端同仓的架构,开发和维护都很顺畅。首屏内容依靠服务端渲染,编辑区采用客户端渲染保证交互流畅性。
服务端渲染的理解
SSR(服务端渲染)适合动态数据和 SEO 要求高的场景,每次请求都在服务端生成 HTML,服务器压力相对较大;SSG(静态站点生成)适合内容相对固定的场景,在构建时生成页面,访问速度快,但内容更新需要重新构建;强交互页面适合使用客户端渲染。在 DocFlow 项目中:列表页使用 SSG,详情页使用 SSR,编辑器使用客户端渲染,在首屏加载速度和交互体验之间取得了较好的平衡。
这里有个坑:SSR 场景下如果后端服务挂了,浏览器端可能不会显示任何报错信息,只是页面内容无法正常显示,这时需要去服务器查看日志或重启服务才能定位问题。
![]()
构建优化
Next.js 的代码分割、图片优化、next/font 字体优化等特性在 DocFlow 项目中都有应用,自动生成多尺寸图片和字体加载优化对性能提升和用户体验改善帮助很大。
React Native
使用 React Native 开发移动端应用,一套代码可以同时运行在 iOS 和 Android 平台,很多公司都有这方面需求,掌握这个技能会有明显优势。我做过内部工具 App,开发周期比原生开发短很多;列表渲染使用 FlatList 组件,配合 useMemo 和 useCallback 进行性能优化,性能才能达到理想状态。需要注意样式兼容性和原生模块调用会有一些坑,但对于中小型项目来说足够使用。
Electron
公司项目使用 Electron 开发桌面应用,虽然性能不如原生应用,但可以用 Web 技术栈开发桌面应用,对小团队来说很合适。尝试过 electron-vite,但配置和稳定性不够理想,后来自己搭建构建流程,使用 rspack(基于 Rust 的构建工具,速度快、灵活度高),主进程和渲染进程的打包、依赖 externalize 等都自己控制。项目采用 Monorepo 架构(pnpm + turbo),拆分成 electron-core、electron-ipc、electron-window 等包,主进程和渲染进程可以共享公共代码。也研究过 Tauri,体积更小、性能更好,但它使用系统 WebView,部分 Web API 和 Chrome 扩展不支持,由于我们项目需要完整的浏览器特性,所以继续使用 Electron。打包使用 electron-builder 生成各平台安装包,整体流程比较顺畅。
Node.js
开发脚手架时使用 Node.js 实现命令行工具、文件操作、模板渲染等功能,熟悉了 fs、path 等核心模块和命令行参数解析。后来还编写了 ffmpeg 视频处理、sharp 图片压缩等脚本,对 npm 生态和原生模块有了更深入的了解;选择第三方包时需要特别注意代码质量和安全性。异步处理从最初的回调函数到 Promise 再到 async/await,在 I/O 密集型场景下非常合适,这也是我选择它作为后端技术栈的原因之一。前后端都使用 JavaScript,技术栈切换成本低,就这样逐渐从纯前端转向了全栈开发。
NestJS
NestJS 基于 TypeScript 构建,通过依赖注入、模块化设计、装饰器(如 @Controller、@Service、@Injectable)将代码结构组织得非常清晰,与 WebSocket、Prisma 等技术搭配使用很顺手。依赖注入和模块边界的概念一开始需要适应,但熟悉之后开发效率会明显提升。
TypeScript
TypeScript 现在是我必选的技术栈:类型安全、IDE 友好、重构有保障,在大型项目中能提前拦截很多潜在错误;泛型、联合类型、交叉类型等高级特性熟练运用后,代码会更加灵活。早期习惯写 any 类型,后来发现类型定义越精确,代码质量越稳定;配合 AI 代码补全和错误提示,修改一处代码能立刻看到所有关联的类型报错,不用等到上线才发现问题。类型定义本身也是最好的协作文档。
MySQL
后端开发常用 MySQL + Prisma 组合:Prisma 提供类型安全、数据库迁移可版本化管理、查询构建器易用性强等优势,使用规范的迁移流程后数据库表结构管理会非常清晰。Redis 用于缓存、会话存储、分布式锁等场景,高性能读写和并发控制都依赖它;使用时需要注意缓存穿透、缓存雪崩和过期策略的设计,持久化配置根据业务需求选择,内存使用也要做好监控和控制。
Elasticsearch
Elasticsearch 是我用来解决「海量数据检索」和「日志可观测性」的核心工具。它最大的价值不在于"能存储数据",而在于能将数据转化为可检索、可聚合、可分析的形态:既能实现全文搜索(关键词匹配、模糊搜索、高亮显示、相关性排序),也能进行统计分析(聚合计算、分桶统计、TopN 排名),即使在数据量达到海量级别后依然能保持不错的查询性能。
在项目里我主要拿它来做什么
我在一个数据可视化平台项目中使用 Elasticsearch 实现全文搜索功能:前端采用 React + TypeScript,后端使用 Node.js。用户端的体验是:输入关键字可以快速定位到相关记录,同时还能按时间范围、状态、标签等条件进行筛选;管理端则可以展示一些统计面板(比如按类型分桶统计、按时间聚合趋势图、Top 错误码排名等)。
落地时我最常用的能力主要有这些:
- 全文搜索:选择合适的分词器(中文或英文)、多字段检索(title、content、tags)、高亮展示、相关性排序。
- 结构化过滤:使用
keyword字段做精确匹配(状态、ID、枚举值),避免把过滤条件写成"全文匹配"导致性能下降。 - 聚合分析:使用 terms、date_histogram 等聚合功能实现 TopN 排名、趋势图、分布统计(这比在业务数据库里实时计算要高效得多)。
- 分页与深翻页:常规分页使用 from、size 参数,但要注意深翻页的性能问题;需要深翻页或导出数据时更建议使用 search_after 或 scroll 方案。
Kibana 能用来干嘛
Kibana 配合 Elasticsearch 主要用于日志检索和线上问题排查:将服务日志按字段结构化存储(时间、环境、应用名、日志级别、traceId、用户信息、请求信息等),然后在 Kibana 的 Discover 界面中使用 KQL 或 ES|QL 快速筛选、聚合和定位问题。
![]()
典型应用场景包括:
- 定位异常的上下文:先按
level:error和时间范围过滤,再按traceId或requestId串联起一整条调用链的日志记录。 - 分析错误分布:按
errorClass、errorName进行分组统计,快速查看最常见的错误类型和占比。 - 排查用户反馈问题:按
userId、path、statusCode进行过滤,复现当时的请求 headers 和 body(敏感字段需脱敏处理)。 - 监控趋势变化:观察错误量在时间轴上的突增点,通常能直接对应到某次版本发布、某个依赖服务异常或上游服务波动。
RabbitMQ
RabbitMQ 是在 DocFlow 项目中真正派上用场的:我开发了一个播客功能,需要将文章内容循环生成语音。语音生成需要调用 Minimax API,但它有调用频率限制,如果用户数量多、任务量大,直接同步调用很容易被限流,接口响应也会变慢,用户体验很差。
因此我使用 RabbitMQ 将"生成语音"这类耗时任务从主流程中解耦,改为异步处理:请求进来后先写入数据库并投递消息到队列,接口立即返回任务状态;后台 worker 从队列中消费消息,按照设定的并发数控制速率调用 Minimax API,生成完成后将结果写回数据库(如语音文件地址、失败原因、重试次数等)。这样做的好处非常明显:削峰填谷、避免被限流、前端接口不被长任务阻塞,任务失败也可以通过重试机制提高成功率。
Docker
Docker + Docker Compose 用于容器化和多服务编排,开发环境和生产环境使用相同镜像,已经成为基本标配。DocFlow 项目使用 docker-compose.yml 管理前端、后端、数据库、Redis 等服务,依赖顺序、网络配置、数据卷、.env 环境变量都在这里统一配置;数据持久化使用数据卷,敏感信息不写入代码。Dockerfile 使用多阶段构建减小镜像体积,健康检查、日志驱动(生产环境可接入日志系统)等配置也都会添加。镜像打上 tag 推送到镜像仓库,线上拉取运行,回滚也很方便。
Nginx
Nginx 用于反向代理、负载均衡、静态资源服务,相比 Node 直接输出静态文件更加合适。单机部署多个项目时使用 server_name 区分域名并转发到不同服务;通过 location 配置区分静态资源和 API 请求,缓存策略和 gzip 压缩也一并配置。灰度发布使用 upstream 配置流量比例(如 9:1),逐步放量,出现问题可以快速切回旧版本。
Prometheus 和 Grafana
Prometheus 用于采集指标数据,Grafana 用于制作可视化看板,我用它们监控接口延时、错误率、CPU、内存、Event Loop、Node 版本、进程运行时长等指标。DocFlow 的监控 Dashboard 上方展示请求量、Apdex、错误率、运行时间,下方展示资源使用曲线,出现问题时能快速判断是应用层、数据库还是基础设施的问题。使用时要注意瞬时值和区间统计的区别、数据抓取间隔和标签设置,否则容易出现数据失真或误判。
![]()
LangChain
前端、后端和基础设施都熟悉之后,我开始向 AI 应用方向发展,使用 LangChain 构建大模型应用(聊天机器人、文档问答、数据分析等)。LangChain 的概念较多,上手需要花些时间,但熟悉之后链式调用会非常顺手。
我主要将 RAG(检索增强生成)流程跑通了:文档加载、文本分割、向量化(使用 Qwen/Qwen3-Embedding-8B)、写入向量数据库 Qdrant,查询时检索相关文档片段再交给大模型生成回答;使用 PDFLoader、WebBaseLoader 等加载器从多个数据源导入知识库。Memory(如 ConversationBufferMemory)用于存储对话历史;Agent 让模型可以按需调用工具(搜索引擎、数学计算、API 接口、数据库查询等)。后续在 DocFlow 项目中会实现「一键生成文档」功能:给定标题或提纲,Agent 自动调用检索、内容生成、排版、插图等工具,并通过检索已有知识库来减少幻觉问题。
大模型服务使用的是 硅基流动,服务器在国内访问稳定,新用户有免费额度,支持对话、图像、视频、语音等多种模型,对接开源模型的成本和稳定性都很不错。此外还用 Next.js + NestJS 开发过智能客服系统,将 RAG 流程和知识库构建、检索优化等技术实践了一遍。总体来说学习 LangChain 的性价比很高,AI 应用的场景也越来越多。
技术栈的选择逻辑
项目需求:需要 SEO 优化选 Next.js,移动端开发选 React Native,桌面应用选 Electron,AI 应用选 LangChain。
团队能力:团队熟悉什么就用什么,学习成本也要考虑进去。
生态和社区:React、Node.js、TypeScript 这类主流技术,查问题方便、招人也容易。
我的成长路径
我的成长路径是:纯前端 → 全栈 → AI。工作一年后不满足于只写页面,开始学习 Node.js 做后端开发,前后端一起做,能够独立完成整个项目。AI 技术兴起后又学习了 LangChain,将大模型集成到项目中,这算是我的第三条技术线。
未来规划
下一步计划学习 Python,从「前端 + Node 全栈」扩展到「前端 + 全栈 + Python AI」:很多 AI 模型和工具链都是基于 Python 构建的,掌握 Python 能更深入地理解模型训练和推理过程。同时继续深耕前端和用户体验,在 Python 生态中熟练掌握 RAG、Agent、向量数据库、模型微调、推理部署等技术,从「调用 API」进阶到「自己搭建完整的 AI 技术链路」。
总结
技术栈没有标准答案,需要根据项目需求和团队情况来选择。我目前使用的这套技术栈都是在实战中筛选出来的,追求的是稳定和可用。从纯前端到全栈再到 AI,技术栈会随着业务需求不断演进,关键是保持持续学习的能力。
给新人的建议:先把基础打牢,根据实际需求选择技术栈,不要盲目追逐新技术,实用性优先。如果你也在从前端转型全栈或 AI 方向,欢迎交流探讨。
我最近完成了 React 源码详解、前端工程化系列、Tiptap 详解、Yjs 源码解析 等技术小册,同时也在维护开源项目 DocFlow,这个项目的技术基本涵盖了上述的所有技术栈,其中前端使用的是 NextJS,后端使用的是 NestJs。
如果你对这些技术栈感兴趣,或想参与开源项目学习交流,欢迎:
- ⭐ 给 DocFlow 点个 Star:github.com/xun082/DocF…
- 💬 添加微信
yunmz777进技术交流群,一起讨论前端、全栈、AI 技术
![]()
![]()