从零开始构建一个现代化前端项目:一个杭州码农的血泪与顿悟
去年十月的一个周五晚上,我坐在家里书桌前,盯着屏幕上空荡荡的 VS Code,心里五味杂陈。
那天刚开完产品评审会,产品经理小李拍着胸脯说:“这个新项目很重要,老板亲自盯的,前端就你一个人扛了。” 我点点头,表面淡定,心里却在疯狂打鼓——因为我知道,所谓的“新项目”,其实是把原来那个用 jQuery 写的、连 IE8 都还在兼容的祖传后台系统,彻底推倒重演。
而我,一个工作6年、经历过两次大厂裁员、刚刚在杭州买下一套60平老破小、每月还着5800房贷的普通程序员,成了这场“现代化革命”的唯一前锋。
起手式:别一上来就写代码
很多人以为,前端项目就是 npx create-react-app 一把梭。但现实是,工具链没搭好,后期全是坑。
我吃过这亏。三年前跳槽到上一家公司,接手一个 React 项目,结果 Webpack 配置像蜘蛛网,Babel 版本混乱,连 ESLint 规则都是靠人肉口口相传。每次改个配置,本地跑得好好的,CI 直接红成一片。那段时间我天天加班到十点,回家路上看着西湖边的情侣散步,心里只有一个念头:“老子是不是该转行卖煎饼?”
所以这次,我给自己立了个规矩:第一天,不写一行业务代码,只搭基建。
我打开 Notion(对,就是那个被微软收购后越来越贵的工具),新建一页,写下几个关键词:React、TypeScript、Vite、ESLint、Prettier、Husky、Commitlint、Jest、Cypress、Docker。
没错,现代化前端项目,早就不是“会写 React 就行”那么简单了。它是一整套工程化流水线,背后是无数前辈踩坑后总结出的最佳实践。
工具链:不是炫技,是为了活下去
先说为什么选 Vite 而不是 Create React App(CRA)。
CRA 太重了,启动慢得像我家那台用了五年的 MacBook Air 开机。而且它的 Webpack 配置藏得太深,想改个 alias 都要 eject,一旦 eject 就再也回不去——跟某些公司的晋升通道一样,进去了就出不来。
Vite 基于原生 ES 模块,冷启动快到飞起。上周五我试了一下,300+ 组件的项目,启动只要 1.2 秒。老婆在旁边看我笑:“你今天怎么这么开心?” 我说:“宝贝,这不是快,这是自由。”
然后是 TypeScript。以前我觉得 TS 是给强迫症用的,直到某次线上 bug 是因为一个 API 返回了 null 而不是 {},导致整个页面白屏。那次事故让我背了 PIP(绩效改进计划),差点没保住工作。
现在?TS 是底线。哪怕只是个内部工具,我也要求全量类型覆盖。不是为了装逼,是为了少背锅。
再来说说那些“看不见但救命”的工具:
- ESLint + Prettier:统一代码风格,避免团队里有人写 2 空格、有人写 4 空格,吵到 HR 那里去。
- Husky + Commitlint:提交前自动跑 lint 和测试,确保没人偷偷把
console.log提上去。有一次实习生提了个 commit 叫 “fix bug”,我直接在群里@他:“兄弟,你这 commit message 比我的房贷账单还模糊。” - Jest + Cypress:单元测试和 E2E 测试都配齐。虽然产品经理总说“先上线再说,测试后面补”,但我知道,没有测试的项目,就像没买保险的房子——看起来省了钱,真出事就倾家荡产。
Python?对,你没看错
看到这里你可能疑惑:标题不是说要包含 Python 吗?前端项目搞 Python 干嘛?
别急,听我讲个故事。
我们这个新系统需要对接一个内部数据平台,对方只提供 Python Flask 写的 REST API,而且文档写得跟天书一样。更惨的是,他们用的是 Python 3.7,而我们本地开发环境是 3.11,依赖冲突搞得我头大。
怎么办?硬啃?No。
我写了个轻量级的 Mock Server,用 Python 的 http.server 加几行 JSON 返回,模拟真实接口。这样前端就能并行开发,不用等后端联调。等后端 API 稳定了,一键切换 URL 即可。
这个小工具不到 50 行代码,但帮我们抢回了整整一周的工期。老板在周会上夸我“有产品思维”,其实我心里清楚:这不是产品思维,这是被逼出来的生存智慧。
而且,现在很多前端工具链底层都用到了 Python。比如生成文档的 Sphinx、自动化部署的 Fabric、甚至有些 CI/CD 脚本。会点 Python,等于多了一把瑞士军刀。
产品思维:别只做“切图仔”
说到产品,我得坦白一件事:刚工作那会儿,我以为前端就是把设计稿“切”成 HTML + CSS。后来发现,真正值钱的,不是你会不会写 hooks,而是你能不能理解产品要解决什么问题。
这次重构,我主动约产品经理小李喝了杯瑞幸(32块,心疼但值得)。我问他:“这个新后台,最核心的用户痛点是什么?”
他说:“销售每天要手动导出 5 张表,再合并成一张 Excel 发给客户,平均花 40 分钟。”
我一听,眼睛亮了——这不就是可以自动化的地方吗?
于是我在前端加了个“一键生成报告”功能,调用后端接口聚合数据,直接在浏览器里渲染 PDF 并下载。技术上用了 react-pdf + html2canvas,不算难,但用户体验提升巨大。
上线后,销售主管特意发邮件感谢团队。老板在月度会上说:“这个功能 ROI(投入产出比)极高。” 而我,也因为这件事,在年底晋升答辩时多了个亮眼案例。
你看,前端离产品最近,你完全可以成为“技术型产品经理”。别把自己局限在 div 和 span 里。
真实世界的妥协
当然,理想很丰满,现实很骨感。
比如,我们原本想上微前端,拆分成独立模块。但评估后发现,团队只有我一个前端,维护成本太高,果断放弃。
又比如,想用 Tailwind CSS 替代 Less,但 UI 设计师只会给 Sketch 文件,组件库还是基于 Ant Design 的,迁移成本太大,只能作罢。
这些妥协不可耻。成熟的工程师,知道什么时候该坚持,什么时候该退一步。毕竟,我们不是在写毕业论文,而是在交付能赚钱的产品。
写给和我一样的你
现在回头看,从零搭建一个现代化前端项目,技术只是基础,心态和方法论才是关键。
如果你也在经历类似的事,我想给你几点建议:
- 别怕慢,先搭好地基。磨刀不误砍柴工,前期多花一天搭工具链,后期能省十天救火时间。
- 学会用非前端语言解决问题。Python、Shell、甚至 Excel 宏,只要能提效,都是好工具。
- 主动靠近产品。理解业务,才能写出有价值的代码。
- 接受不完美。没有完美的架构,只有“刚好够用”的方案。
最后一点感慨
上周日,我和老婆去看了新房附近的学区。中介说:“这套房明年划片可能会变。” 我笑了笑,没说话。
我知道,这个世界变化太快。就像我六年前刚入行时,还在争论 Angular 和 Vue 谁是未来;现在,连 React 都在被 Svelte、Solid.js 挑战。
但有一点不变:只要你能持续交付价值,就永远有饭吃。
房贷还得还,代码还得写。但至少,我现在写的每一行代码,都离“更好的生活”更近了一点。
共勉吧,兄弟们。
作者:一个在杭州努力还贷的前端工程师,现就职于某二线大厂,经历过裁员、跳槽、晋升,目前月薪22k(税前),房租早已省下,但焦虑从未消失。

评论 0