开头叠两个甲:
第一,写下本文是因为 AI 圈天天地震,我就挑最典型、自己也犯过的错来讲讲,就当一种自我解嘲吧。
第二,我绝对欢迎 AI 编程,但"一蹴而就"这种思想不可取。
AI 带给我们最大的浮躁就是:创造结果的时间太多,学习过程的时间太少。
本文旨在表达"先做起来,在做中学"的观点。
如果你点开这篇文章还是为了来找 npm 和 Bun 谁更好的答案的,我告诉你:选择 pnpm。没有什么团队能彻底抛弃 Node.js,pnpm 在兼容性与性能间做到了最好的平衡。OK,你现在可以退出界面接着看下一篇"最佳实践"去了,gogogo。
焦虑是怎么来的
这种焦虑有两根引线。
第一根:AI 降低了动手门槛,也制造了"动手了就是懂了"的幻觉。 你对 AI 说"帮我写一个用户登录系统",Cursor 唰唰唰生成几百行代码,跑通了,你觉得自己"会了"。三个月后系统崩了,你站在满屏红色报错前,发现自己看不懂错误堆栈在说什么。那些底层知识,AI 帮你跳过了,你也心安理得地跳过了。你刚觉得自己能评价工具的优劣,其实连工具出问题了你都修不了。
第二根:信息过载让你觉得"选错"的代价很高。 以前你只知道 npm,现在 Bun、pnpm、yarn、deno 同时推到你面前,社交媒体还不断给你推送"为什么我从 npm 迁移到了 Bun"的爆款文章。"最佳实践"四个字从一种参考,变成了一种压迫。
你刷到的其实是经过剪辑的技术爽文,看多了,你会觉得全世界都在用最新最酷的工具,只有你还在用"老古董"。
AI 工具本身也在替你做判断。Cursor 的补全建议、Copilot 的代码生成,都在潜移默化地告诉你"这样写是主流"。到最后,"最佳实践"是 AI 喂给你的,你连质疑的力气都没有了。
两根引线拧在一起,就拧出了一个问题:你把精力花在了选工具上,而不是写代码上。
工具从来不是瓶颈
先看一张图:

TECHSY 基准测试证实了 Bun 确实快。数据对比如下:
| 包管理器 | 冷装 50 个依赖耗时 |
|---|---|
| Bun | 0.8 秒 |
| npm | 14.3 秒 |
差距是 13.5 秒。但对于绝大多数项目,这 13.5 秒,远不如"代码里有没有一个未处理的异常"来得致命。
再看代码质量:

ShipLight 对 470 个真实 GitHub PR 的追踪分析:
- AI 生成代码总问题数:人类的 1.7 倍
- 逻辑错误:多 75%
- 安全漏洞:多 2.74 倍
Bug 来自逻辑错误和安全漏洞,跟包管理器选 npm 还是 Bun 没有任何关系。
再看历史。2004 年 ,Mark Zuckerberg 用 PHP 写 Facebook。代码库后来被工程师自嘲为"屎山",但它支撑了 Facebook 从校园网站到全球巨头的全过程。2010 年 用户破 5 亿,PHP 成为瓶颈;2011 年 推出 HipHop,把 PHP 编译成 C++;2014 年 开发 Hack 语言,逐步迁移。PHP 够不够好根本不是重点------重点是他先跑起来了。
所以,不要追求"完美",要追求"价值";不必放大 npm 和 Bun 这种无关痛痒的问题的焦虑。
"最佳实践"是个伪命题
先跑起来,这个道理谁都懂。但很多人没想明白的是:你根本不需要"最佳"的方案。
技术选型的本质是取舍,不是找最优解。你的项目有几个开发者?交付 deadline 有多紧?团队对哪个工具更熟悉?性能瓶颈在哪?这些问题没有标准答案。
- 一两个人的小项目,用 npm 完全够用,换 Bun 省下来的时间还不够你读一遍迁移文档
- 几十人的团队,可能需要 pnpm 的 workspace 和严格的依赖管理
别人的"最佳实践"写在他们特定的上下文里,你抄过来,代价谁来承担?
追求面面俱到,本质上是在追求一个不可能完成的任务。你想找一个工具,它速度快、生态全、学习曲线平缓、社区支持好、零配置零坑点。这种工具不存在。
- pnpm 在磁盘空间上省了,但它的软链接机制带来了新的心智负担
- Bun 安装快,但你团队里没人写过 Bun 的 bug report
每个选择都有代价,区别只是你把代价花在哪。
所以,选型的时候,问自己一个问题就够了:这个选择在我当前的场景下,最大的风险是什么?能接受,就选它。不能接受,换一个。就这么简单。
坑只能自己踩
很多问题,别人说了,你没体会。自己用了,才会发现。
你在 Twitter 上看到有人洋洋洒洒写了五千字分析 Bun 在处理大型 monorepo 时的内存问题。你觉得醍醐灌顶,截图保存,转发到团队群里。但你们项目只有三个依赖,连 monorepo 是什么都还没搞清楚。那条五千字文章救不了你,但它成功让你多花了一个下午去调研。
别人的经验是二手信息。他踩坑的环境、项目结构、团队配置、使用方式,和你一模一样吗?
就算一模一样,他描述"坑"的方式和他实际"踩坑"的感受,中间还隔着一层语言压缩。你读到的是一篇技术博客,他经历的是一个深夜 debug 的下午。
这在 AI 时代尤其致命。AI 给你的是"标准答案",但标准答案不适用于你的具体情况。Cursor 帮你写了一段代码,它不会告诉你,这段代码在你们的业务高峰期会有什么表现。Copilot 补全了一个函数,但它不知道你们的代码库已经有一个功能相似但实现不同的函数,只是名字不一样。
这些"不知道",AI 不会主动告诉你,你必须自己跑一遍、测一次、踩一次。
这与 AI 最大的价值背道而驰
AI 时代最大的优势是什么?是快速试错。
以前你做一个技术调研,要翻几篇博客、读几个 benchmark、在本地搭环境跑测试。一下午过去了,你还在纠结。现在呢?让 AI 给你做个对比分析,一分钟出结果。
这个速度差异意味着什么?意味着你可以用更少的代价,把多个方案都跑一遍,用实际数据说话。
但前提是,你真的去跑了。
纠结选型的过程,恰恰是把"快速"两个字扔进了垃圾桶。你在论坛上翻了两小时帖子,在 AI 对话框里问了三轮"Bun 和 npm 哪个好",在 GitHub 上对比了五个项目的迁移记录。这三个小时,如果你直接选了 pnpm 开工,代码都已经写完了。而 pnpm 和 Bun 在实际项目中的真实差距,远没有论坛上说的那么戏剧化。
你会说:万一选错了呢?选错了又怎样? AI 帮你迁移的速度,比你纠结的速度快得多。bun.lockb 转 package-lock.json,一行命令的事。
真正让项目陷入困境的,从来不是包管理器的选择------是代码里的逻辑错误、是架构上的缺陷、是业务理解上的偏差。这些坑,不管你选 npm、Bun 还是 pnpm,一个都躲不掉。
先跑起来,再迭代
如果你也困在"选型焦虑"里,这里有几个我亲测有效的做法:
-
给自己设一个"选型截止时间"。工具选型最多花两小时。时间一到,抓阄也要选一个,然后写代码去。你会发现,绝大多数时候,"选 A 还是选 B"对结果的影响,小于"你多写了两小时还是少写了两小时"。
-
区分"学习"和"干活"。学习新工具可以,但给它单独的时间段,比如周末下午。工作时间里,用你最熟悉的工具,把事做完。不要让"学习"成为"拖延"的遮羞布。
-
刻意保留"不用 AI"的能力。每周抽一点时间,手写一段代码、手动查一次文档、自己画一张流程图。为了保持"底层理解"的肌肉记忆,不是为了复古。AI 是拐杖,但你的腿不能废。
-
接受"过时"的必然性。你今天写的代码,三年后看大概率是"垃圾"。这不是你的失败,这是技术进化的常态。重要的是,这三年里你交付了什么价值,解决了什么问题,成长了多少。
工具会过时,能力不会。PHP 成了 Facebook 的瓶颈,但 Zuckerberg 先用 PHP 把 Facebook 跑起来了。
你今天纠结的"最佳实践",三年后可能就被淘汰了。但你在实践中积累的调试能力、架构直觉、问题嗅觉,是任何工具都夺不走的。
把精力花在真正重要的事上。 不是选一个完美的工具,而是用你选的工具,做出一个能用的东西,然后迭代它。
这就是 AI 时代"最佳实践"的真正含义。