
去年我接手一个新的前端项目,还没写一行业务代码,就被迫塞进去了12个npm包。
Vite、Tailwind、ESLint、Prettier、TypeScript、Husky、Lint-Staged、Vitest、React Query、Zustand、Axios,再加上某个号称"必装"的CLI工具——这货安装到一半直接炸了。
等我终于把环境搭好,我已经忘了这个项目最初想解决什么问题。
这不是个案。我在开发者社区里看到类似的吐槽至少100遍。大家都在问同一个问题:为什么一个看似简单的项目,初始化却像在安装一个操作系统?
这种现象有个新的学名叫 "前端疲劳症" ——一种由频繁学习、不断"卸载-重装"知识,以及无休止的技术栈升级引发的慢性职业耗竭。
而2025年,有个有趣的反转正在发生:最聪明的开发者开始反向操作了。
过去三年,前端圈就像淘金热一样疯狂。每隔几个月就有新框架宣称要"修复"React的缺陷,加快打包速度,或者彻底消除样板代码。然后我们都信了。
React给了我们灵活性,但Hooks让你需要理解闭包陷阱。Next.js简化了路由,转身Server Components又把一半的教程打翻了。大家开始装TypeScript,因为"真正的工程师都要用类型检查",但没人能对配置达成共识。
我们像盲目拼装IKEA家具一样,看哪个工具火就往项目里加:
项目初始化清单(典型2023年配置):
├─ Vite(快速打包)
├─ TypeScript(类型安全)
├─ React + React Router(框架)
├─ Tailwind(样式)
├─ Redux + Redux Toolkit(状态管理)
├─ Axios(HTTP客户端)
├─ Jest + React Testing Library(测试)
├─ ESLint + Prettier(代码规范)
├─ Husky + Lint-Staged(Git钩子)
└─ 各种polyfill和兼容性补丁
让我问你一个冷酷的问题:这个项目是真的需要Redux,还是因为"Redux是最佳实践"而装的?
大多数答案是后者。这就是复杂度的真相——不是因为问题本身复杂,而是我们被"最佳实践"绑架了。
这里有个容易被忽视的事实:大部分项目失败,不是因为代码不够花哨,而是因为工具链变成了一个黑盒。
开发者花在"配置环境"上的时间,占了项目周期的15-20%。这意味着一个10人的团队,每周有1-2个人的工作量在纯粹地调试工具。
更恐怖的是,这些配置往往没有文档。六个月后,新入职的同事问"这个ESLint规则为什么这么严格",没人能解释。
而且这些工具彼此依赖形成了脆弱的生态链:
更新链条反应:
Vite 升级
↓
需要更新 Tailwind 配置
↓
可能需要调整 PostCSS
↓
ESLint 规则可能冲突
↓
TypeScript 版本兼容性问题
↓
结果:原本一个小更新,变成了周末的技术债清算
一个简单的依赖更新,能引发连锁反应,把整个周末搭进去。这已经成了大部分团队的常态。
几个迹象表明,开发者正在觉醒。
1. 框架设计哲学的转变
新一代框架(Astro、SolidStart、Qwik等)的共同特点:**首先问的不是"能做什么",而是"真的需要什么"**。
这不是性能优化,这是哲学转变。它们承认:大部分页面不需要一个1MB的JS包。
2. 浏览器能力升级
原生JavaScript已经不是2010年那个阉割版了。看这个例子:
// 旧时代做法(Lodash 依赖)
const uniqueUsers = _.uniqBy(users, 'id')
// 文件体积:70kb
// 2025 原生做法
const uniqueUsers = [...new Map(
users.map(u => [u.id, u])
).values()]
// 文件体积:0kb
数组去重这样的基础操作,已经完全不需要外部库。类似的例子在你的代码里可能有几十个。
3. 人工成本压倒技术成本
这是一个容易忽视但很关键的转折点。随着工程师薪资上升,每一个"配置时间"都等于真实的成本。
一个高级工程师花一小时在Webpack配置上,这小时的成本是多少?往往高于"多拉几百kb包体积"的成本。
所以决策逻辑反转了:能用简单方案就不碰复杂的。
我看到的一些真实场景:
案例1:电商列表页
某个中型电商公司的商品列表页,原本是:React + Redux + React Query + 一堆中间件。
后来他们意识到:这个页面是服务端渲染的、数据是静态缓存的、交互就是个搜索框。
重构方案:Next.js Pages Router(SSR模式)+ 原生useState。
结果:打包体积从850kb降到280kb,首屏时间从2.8s降到0.9s,最关键的是——新人上手时间从3天降到3小时。
案例2:中后台系统
某金融公司的风控后台,各种复杂表单和实时数据。用过Mobx、Redux、Jotai各种状态管理。
后来他们做了个激进决定:状态管理逻辑全部移到后端。前端只负责UI层。
前端状态管理代码反而简化到一个简单的 React Context + custom hooks。代码行数减少了40%,debug难度反而下降了。
我能理解为什么开发者会抗拒简化。
你可能在想:"如果我不学Redux、不跟风最新技术,会不会显得我水平不行?" 或者"简化工具链会不会让我在行业竞争中落伍?"
但这是一个关键误解。
真正的高手从不追风,而是选择"不做的事"。
React作者Dan Abramov有句话说得很好:复杂度是用来解决问题的,不是用来炫耀的。
如果你能用100行原生代码解决的问题,却装了一个10kb的库来做,这不是professional,这是过度设计。
反而,在多个框架间知道什么时候用什么——这才是高级工程师该有的判断力。
第一步:审视你的依赖
拉个Excel表格,列出你项目中的每一个npm包。然后问三个问题:
如果答案是"我也不知道",恭喜,你找到了一个可以删的包。
第二步:重新评估框架选择
第三步:状态管理"断舍离"
需要全局状态吗?
├─ 不需要 → useState(99%情况)
├─ 需要但只是服务端数据 → React Query/SWR
├─ 需要且UI状态复杂 → useReducer + Context
└─ 真的需要Redux级别 → 再装(但很罕见)
第四步:工具链极简化
抛弃自定义配置,用业界预设:
前端疲劳的根源,说到底不是技术问题,而是心理问题。
每次框架更新都像考试,你总觉得要参加。错过一个热点,就好像掉队了。Tech Twitter上的声音让你觉得"如果不用最新工具,就不够专业"。
但2025年这个心态正在改变。我看到越来越多有10年经验的高级工程师,开始公开说:**"我用了三年都没升级某个依赖,项目运行得好好的。"**
这不是故步自封,这是成熟。
真正的工程素养,是知道什么时候说"够了"。
如果你想在接下来的几年保持竞争力,不是"学更多新框架",而是:
2025年最稀缺的开发者,不是那些会30个框架的人。
而是那些知道什么时候用3个框架就够了的人。
💬 你怎么看?
这个项目中,有哪个npm包,在你看来是完全可以删掉的?欢迎在评论区聊聊,这也许会成为你团队下一次技术重构的开端。