从零开始构建一个现代化前端项目:一个曾经抗拒AI的码农的真香之路

一个会部署的人
2025-12-16 09:28
阅读 495

去年双11前夜,我正瘫在成都某共享办公空间的电竞椅上,盯着 VSCode 里密密麻麻的 webpack 配置,心里默念:“这届产品经理是不是又在拿我的职业生涯开玩笑?”
事情是这样的:公司临时要推一个新运营活动页面,要求三天上线,支持 SSR、PWA、按需加载、暗黑模式,还要兼容 IE11(对,你没看错)。而我手头的旧项目还是 Vue 2 + webpack 4 的“古董”,连 package.json 里的依赖都快变成考古文物了。

作为一个曾经坚定认为“AI 写代码就是糊弄鬼”的老派程序员,我一度觉得这种需求根本就是反人类。但现实很骨感——简历上写着“精通现代前端架构”,结果连 Vite 都没跑过,跳槽面试被问到微前端直接哑火。那一刻,我意识到:代码人生不能只靠情怀续命,得跟上时代节奏。

于是,我咬咬牙,决定从零搭一套真正“现代化”的前端项目。不为别的,就为了下次 HR 问“你做过什么技术基建”时,我能挺直腰板说:“我从零搭过。”


别再用 create-react-app 交差了

说实话,刚接触 Vite 的时候我是抗拒的。总觉得它太“轻”,像泡面一样缺乏营养。但当我用它初始化一个新项目,300ms 内启动 dev server 的那一刻,我真的愣住了——这速度,比我泡茶还快。

npm create vite@latest my-modern-app -- --template react-ts

几行命令下去,一个带 TypeScript、React 18、ESLint、Prettier 的骨架就出来了。对比以前手动配 webpack 的痛苦,简直是从石器时代穿越到了赛博朋克。

不过,光有骨架不够。真正的现代化项目,得考虑产品落地的全链路:开发体验、构建性能、线上监控、SEO、甚至运营同学能不能自己改文案。


架构设计:不只是写组件

我在成都这边工作,节奏舒服,但不代表可以躺平。我们团队有个不成文的规定:任何新项目必须通过“三问测试”

  1. 运营同学能不能在不打扰开发的情况下改首页 banner?
  2. 测试能不能一键部署 staging 环境?
  3. 用户首屏加载超过 2 秒,算谁的?

所以,这次我从第一天就引入了几个关键能力:

1. 动态配置中心(给运营留活路)

运营最烦找开发改文案。于是我在 public/config.json 里放了个动态配置:

{
  "homepage": {
    "bannerText": "双11狂欢,全场5折!",
    "countdownEnd": "2023-11-11T23:59:59+08:00"
  }
}

前端启动时 fetch 这个文件,无需重新构建就能更新内容。虽然简单,但运营小姐姐再也不用在群里 @ 我三次了。

2. 按环境自动切换 API 基地址

// src/utils/api.ts
const BASE_URL = import.meta.env.PROD 
  ? 'https://api.product.com' 
  : 'https://staging-api.product.com';

配合 Vite 的 .env 文件,本地开发自动走测试接口,打包时自动切生产。运维再也不用半夜打电话问我“为什么线上调的是测试接口”。

3. 路由级代码分割 + 预加载

用户不会一上来就点“个人中心”,那干嘛把整个后台代码都塞给他?

const ProfilePage = lazy(() => import('./pages/Profile'));

<Route 
  path="/profile" 
  element={
    <Suspense fallback={<Spinner />}>
      <ProfilePage />
    </Suspense>
  } 
/>

配合 <link rel="prefetch">,在首页 hover 导航栏时就偷偷加载后续页面。实测首屏 JS 体积从 1.2MB 降到 380KB,Lighthouse 分数从 52 直接飙到 89。


性能优化:别让用户体验为你的懒惰买单

说到性能,我就想起上周五晚上加班的惨剧:测试反馈 iOS Safari 上页面白屏 5 秒。查了半天,发现是用了 Intl.RelativeTimeFormat 这种新 API,Safari 14 以下直接报错。

教训深刻:现代化 ≠ 放弃兼容性

于是我做了几件事:

  • core-js + regenerator-runtime 补全 polyfill,但只针对低版本浏览器动态加载
  • 图片全部换成 <picture> + WebP 格式,fallback 到 JPEG
  • 关键 CSS 内联,非关键样式异步加载
  • 所有第三方脚本(比如埋点、客服)全部 lazy load

还顺手加了个 performance.measure() 监控首屏渲染时间,数据上报到内部监控平台。现在产品开会第一句不再是“我觉得慢”,而是“数据显示 LCP 是 1.8s,目标 1.2s”。


工具链:我的 VSCode 插件全家桶

作为插件狂魔,我的 VSCode 装了快 50 个插件。但这次我精简了,只保留核心几款:

插件 用途 真香指数
Prettier 代码格式化 ⭐⭐⭐⭐⭐
ESLint 实时 lint ⭐⭐⭐⭐
GitLens 查看代码是谁写的(方便甩锅) ⭐⭐⭐⭐
REST Client 不用开 Postman ⭐⭐⭐
Error Lens 把错误直接显示在代码行上 ⭐⭐⭐⭐⭐

特别推荐 Error Lens —— 以前 TS 报错要拉到 terminal 看半天,现在直接在代码行下方高亮显示,省下我每天至少 10 分钟的生命。


简历亮点怎么写?

别笑,这很重要。很多程序员技术不错,但简历写得像流水账。这次项目结束后,我这样总结:

主导从 0 到 1 搭建现代化前端架构,基于 Vite + React 18 + TypeScript,实现:

  • 首屏加载时间优化 68%,Lighthouse 性能分 ≥85
  • 支持动态配置,运营自助修改率达 90%
  • 完整 CI/CD 流程,支持自动部署 staging/production
  • 兼容 Chrome/Firefox/Safari 及 iOS/Android 主流机型

你看,产品效果、运营效率、技术指标全都有了。面试官一听就知道你不是只会写 useState 的 CRUD boy。


最后一点真心话

曾经我也觉得“用 AI 生成代码”是偷懒,直到我发现 Copilot 能帮我快速生成符合团队规范的 ESLint 配置,或者自动生成测试用例的 mock 数据。现在我不再抵触,而是把它当做一个高效的 pair programmer —— 它负责搬砖,我负责 architecture 和 code review。

代码人生的本质,不是死磕每一行代码,而是用更聪明的方式交付更高价值的产品。工具在变,但工程师的核心能力永远是:理解问题、权衡取舍、持续交付

所以,别纠结要不要用新工具。如果你还在手动配 webpack,或者简历上三年都是“Vue 项目开发”,也许该像我一样,从零搭一次真正现代化的前端项目。

毕竟,在成都这座慢城里,我们码农也得偶尔快起来——为了更好的生活,也为了下一次跳槽时,能笑着说出那句:“这个,我熟。”

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝