# 十一行 JavaScript 代码搞垮了互联网。一次取消发布。

Published: 2026-09-13

2016年3月22日，世界协调时21:30：一位开发者在npm将包名“kik”交给即时通讯应用Kik后，取消发布了他所有的273个npm包，Kik的专利代理人曾威胁要“让律师上门找你”。这273个包中有一个是left-pad：十一行代码，用于在字符串前面添加空格，每月下载量达250万次。几分钟之内，Babel、React和Node的构建在全球范围内失败，每分钟数百次。十分钟内出现了一个分支，但没有改变任何东西，因为Babel通过行号拉取left-pad，这精确地固定了0.0.3版本。23:55，npm从备份中恢复了被删除的版本——这是注册表历史上首次“撤销取消发布”——一周后发布了24小时取消发布规则。事后分析，根据npm自己的说法和Kik发布的电子邮件线程：注册表允许任何作者删除任何版本，而不进行依赖项检查；瞬态树在每次安装时实时解析；默认情况下没有lockfile。Git blame：60% npm / 25% Kik / 15% 依赖习惯。修复的裁决：SHIP IT。

Canonical: https://thedailydiff.dev/zh-CN/video/2026-09-13-left-pad/

## 本视频涵盖的内容

- 3月11日：Kik的专利代理人要求Azer Koçulu重命名\`kik\`；一小时后：律师“将上门找你并冻结你的账户”；Azer：30,000美元；Kik向npm支持部门发送电子邮件
- 3月18-20日：npm的CEO将名称转让给Kik（“会合理地认为它与kik.com相关”）；Azer要求删除他所有的模块
- 3月22日，世界协调时21:30-23:55：273个包被取消发布；Babel、Atom、Node项目中left-pad@0.0.3出现404错误；21:42出现fork 1.0.0；npm的CTO于23:03发推文称“撤销取消发布”；0.0.3于23:55从备份恢复——共2.5小时
- 3月23日和3月29日：npm的事后分析（“我们犯了错误”）和新政策：只能在24小时内取消发布，已删除名称的安全占位符（2020年起为72小时）

## 翻译的文字记录

译自英文原版旁白。可用音频和字幕由 YouTube 控制。

0:00 一位开发者删除了十一行 JavaScript 代码，几分钟之内，Babel、 React 和 Node 的构建在全球范围内失败，每分钟数百次。 这个函数就是 left-pad。 它用空格填充字符串，到了晚上 npm 做了它说不能做的一件事： 重新发布一个已删除的版本。 它是如何发生的，为什么可能发生，以及谁该承担责任。 这是 The Daily Diff，事后分析。 3月11日。即时通讯应用 Kik 的一位专利代理人，

0:26 给 Azer Koçulu 发送邮件：请重命名您的 npm 包，kik 是我们的品牌。 Azer 说不。 一小时后：我们的商标律师将上门找你， 并冻结你的账户。 Azer 开了一个价格，三万美元， Kik 将邮件转发给 npm 支持部门。3月18日。 npm 的 CEO 裁定，任何输入 npm install kik 的人都会期望安装这个即时通讯

0:48 应用，并将这个名字交了出去。 Azer 要求删除他所有的东西。 两天后他自己动手了：两百七十三个包。 3月22日，世界协调时 21:30。 每个需要 left-pad 的构建都得到了 404 错误。 十分钟后，一个陌生人将其重新发布为 1.0.0， 但什么也没改变，因为 Babel 和 Atom 通过一个名为 line-numbers 的包加载它，该包精确地需要 0.0.3 版本。

1:13 23:03，npm 的 CTO 发推文：un-un-publishing（撤销取消发布）。 23:55，0.0.3 版本从备份中恢复了。 两个半小时。 为什么一个人能做到这一点？ 三个原因。npm 上的任何版本都可以被其作者立即删除， 而无需检查谁依赖它。 其次，依赖是传递性的：Babel 不知道 left-pad 存在， 它知道 line-numbers，并且整个依赖树在每次安装时都是实时解析的。

1:36 第三，在 2016 年，默认情况下没有任何东西会锁定这个依赖树；lockfile 是选择加入的， 因此每次 CI 运行时都会重新询问互联网这十一行代码是什么样子。 一个注册表，由无人依赖它的人运行。 git blame。npm，百分之六十：它自己的事后分析说，不受限制的取消发布 导致了痛苦，并且，引用原文，我们犯了错误。 Kik，百分之二十五：一个专利代理人，而不是律师， 就一个 Kik 已经决定不使用的名字威胁要让律师上门。 依赖习惯，百分之十五：每个 npm 安装了十一行代码而不是

2:06 自己输入的人。 包括 Kik，他们的构建也中断了。 影响范围：两百七十三个包被删除， 其中一个每月下载量达到两百五十万次。 修复用了两个半小时；这个函数只有十一行代码。 在 Hacker News 上，一篇询问我们是否忘记了如何编程的帖子获得了 一千七百个赞，大部分来自那些构建仍然是红色的人。 裁决，事后分析：SHIP IT。

2:26 npm 从备份中恢复，第二天发布了事后分析报告， 并在一周内发布了至今仍然有效的规则：你可以在 二十四小时内取消发布，之后你需要与人工客服沟通。 周一：提交你的 lockfile，如果一个函数只有十一行， 它应该是一个段落，而不是一个依赖项。 在评论中，或者发送到 the daily diff dot dev，把你仍然不被允许谈论的事件发给我。 在评论中，或者发送到 the daily diff dot dev。 这就是今天的 The Daily Diff。

2:48 我是 Axrisi 的 Niko。 负责任地合并。

## 来源

- [npm, Inc., "kik, left-pad, and npm" (Mar 23, 2016)](https://blog.npmjs.org/post/141577284765/kik-left-pad-and-npm) — blog.npmjs.org
- [npm, Inc., "changes to npm's unpublish policy" (Mar 29, 2016)](https://blog.npmjs.org/post/141905368000/changes-to-npms-unpublish-policy) — blog.npmjs.org
- [Azer Koçulu, "I've Just Liberated My Modules" (Mar 22, 2016; archive copy)](https://web.archive.org/web/20160323201305/https://medium.com/@azerbike/i-ve-just-liberated-my-modules-9045c06be67c) — web.archive.org
- [Mike Roberts (Kik), "A discussion about the breaking of the Internet" — the full e-mail thread (Mar 23, 2016; archive copy)](https://web.archive.org/web/20170112194445/https://medium.com/@mproberts/a-discussion-about-the-breaking-of-the-internet-3d4d2a83aa4d) — web.archive.org
- [Laurie Voss (npm CTO) on X, Mar 22, 2016, 23:03 UTC](https://x.com/seldo/status/712414400808755200) — x.com
- [left-pad 0.0.3 on the npm registry (the eleven lines)](https://registry.npmjs.org/left-pad/0.0.3) — registry.npmjs.org
- [Hacker News, Mar 22, 2016 — "I've Just Liberated My Modules" (1,573 points)](https://news.ycombinator.com/item?id=11340510) — news.ycombinator.com
- [Hacker News, Mar 23, 2016 — "NPM and Left-Pad: Have We Forgotten How to Program?" (1,725 points)](https://news.ycombinator.com/item?id=11348798) — news.ycombinator.com
- [Hacker News, Mar 29, 2016 — "Changes to Npm's unpublish policy" (320 points)](https://news.ycombinator.com/item?id=11382885) — news.ycombinator.com
- [The Register, Mar 23, 2016 — "How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript"](https://www.theregister.com/2016/03/23/npm_left_pad_chaos/) — www.theregister.com
