# 十一行 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 發佈的電子郵件串，事後分析如下：該註冊中心允許任何作者刪除任何版本，而不檢查其依賴項；過渡樹在每次安裝時即時解析；預設情況下沒有鎖定檔。歸責：60% npm / 25% Kik / 15% 依賴習慣。修復裁決：SHIP IT。

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

## 本影片重點

- 3 月 11 日：Kik 的專利代理人要求 Azer Koçulu 重新命名 \`kik\`；一小時後：律師「將會上門，並查封你的帳戶」；Azer：30,000 美元；Kik 電子郵件給 npm 支援
- 3 月 18-20 日：npm 的執行長將名稱轉讓給 Kik（「合理預期它與 kik.com 相關」）；Azer 要求刪除他所有的模組
- 3 月 22 日，世界標準時間 21:30-23:55：273 個套件取消發佈；left-pad@0.0.3 在 Babel、Atom、Node 專案中出現 404 錯誤；21:42 出現 fork 1.0.0；npm 的 CTO 在 23:03 推文「un-un-publishing」；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，事後檢討。 三月十一日。訊息應用程式 Kik 的一位專利代理人，

0:26 發電子郵件給 Azer Koçulu：請重新命名你的 npm 套件，kik 是我們的品牌。 Azer 說不。 一小時後：我們的商標律師將會上門，並 查封你的帳戶。 Azer 開價三萬美元， Kik 將該串電子郵件轉寄給 npm 支援。三月十八日。 npm 的執行長裁定，任何輸入 npm install kik 的人預期的是訊息

0:48 應用程式，並將名稱轉交。 Azer 要求刪除他所有的東西。 兩天後，他自己動手：兩百七十三個套件。 三月二十二日，世界標準時間 21:30。 每個需要 left-pad 的建置都得到 404 錯誤。 十分鐘後，一位陌生人將其重新發佈為 1.0.0 版本， 但沒有任何改變，因為 Babel 和 Atom 是透過一個名為 line-numbers 的套件載入它，而該套件精確指定了 0.0.3 版本。

1:13 23:03 時，npm 的 CTO 推文：取消取消發佈。 23:55 時，0.0.3 版本從備份中恢復。 兩個半小時。 為什麼一個人可以做到這一點？ 三個原因。npm 上的任何版本都可以由其作者立即刪除， 無需檢查誰依賴它。 其次，依賴關係是遞移的：Babel 不知道 left-pad 的存在， 它知道 line-numbers，而整個樹在每次安裝時都是即時解析的。

1:36 第三，在 2016 年，預設情況下沒有東西鎖定該樹；鎖定檔是選擇性加入的， 所以每個 CI 執行都會重新詢問網路這十一行程式碼是什麼樣子。 一個註冊中心，由沒有依賴它的人管理。 git blame。npm，百分之六十：它自己的事後檢討說，不受限制的取消發佈 造成了痛苦，引述原話，我們失誤了。 Kik，百分之二十五：一位專利代理人，而不是律師， 揚言要找律師上門，只為了 Kik 已經決定不使用的名稱。 依賴習慣，百分之十五：每個不是自己手打而是 npm-installed 了十一行程式碼的人。

2:06 而不是自己手打。 包括 Kik，他們的建置也失敗了。 爆炸半徑：兩百七十三個套件被移除， 其中一個每月下載兩百五十萬次。 修復需要兩個半小時；該函式只有十一行。 在 Hacker News 上，一篇詢問我們是否忘記了如何程式設計的貼文獲得了 一千七百個讚，大多來自建置仍然失敗的人。 裁決，事後檢討：SHIP IT。

2:26 npm 從備份中恢復，隔天發佈事後檢討， 並在一週內實施了至今仍在實行的規則：你可以在 二十四小時內取消發佈，之後你需要與真人溝通。 週一：提交你的鎖定檔，如果一個函式只有十一行， 它就是一個段落，而不是一個依賴項。 請將你仍然不被允許談論的事件寄給我， 在評論中，或寄到 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
