11行程式碼被刪掉,全世界數千個專案同時壞掉

2016 年 3 月 22 日,一位住在加州奧克蘭的工程師 Azer Koçulu,把自己放在公開套件庫 npm 上的 273 個程式套件,全部下架。
其中一個叫 left-pad,只有 11 行程式碼,功能是在文字左邊補空格。
它下架之後,全世界數千個軟體專案同時沒辦法建置,包括 React、Babel 這些大公司每天在用的工具。
11 行。
一個人。
起因是他跟一家公司爭套件名稱,吵輸了,一氣之下全部撤掉。npm 幾小時後才把套件恢復。
用 WordPress 開課,你的網站很可能也是十幾個「不同人寫的東西」拼起來的。讀完這篇,你會知道 WordPress 開課真正的代價在哪、什麼時候不用換、要換的話怎麼搬。
先講結論:WordPress 可以開課,但代價比你想的高。(好,你可以不用往下看了。開玩笑的。)
▋先說句公道話
這不是要你別用 WordPress。
它是很好的內容管理系統,我們也架過不少。
問題在於:「開課」需要的東西,跟 WordPress 擅長的東西,重疊得沒有想像中多。
▋典型的組合長什麼樣
一個用 WordPress 開課的人,手上大概是這樣:
- WordPress 本體+主機(虛擬主機或 VPS)
- LMS 外掛:LearnDash、LifterLMS、TutorLMS 三選一
- 金流外掛:WooCommerce+台灣金流的第三方橋接外掛
- 發票外掛:另外找,通常是某個工作室做的
- 會員外掛:MemberPress 或 Restrict Content Pro
- 電子報:Mailchimp/MailerLite 外掛,或整套 FluentCRM
- 表單:Contact Form 7 或 WPForms
- 快取:WP Rocket
- 備份:UpdraftPlus
- 安全性:Wordfence
十個外掛起跳。
每一個都要更新,每一次更新都可能跟別人打架。
啊!原來 left-pad 不是遙遠的工程師八卦。
只要你的網站靠很多「不同人寫、不同人維護」的零件拼起來,其中任何一個出事,整台機器都會停。
▋第一個坑:外掛之間會互相踩
🔍 點擊放大LMS 外掛要接管「課程」,WooCommerce 要接管「商品」,會員外掛要接管「權限」。
三者對「誰能看什麼」各有一套邏輯,而且不是同一家寫的。
症狀長這樣:學員付款成功了,課程卻沒開通。你去查,發現 WooCommerce 的訂單狀態是 completed,LearnDash 那邊卻沒收到開通的訊號。原來中間的橋接外掛,在某次更新後改了 hook 的名字。
或者:某個學員說他看得到不該看的課。查了半天,是會員外掛的規則跟 LMS 的權限控制衝突,兩邊都覺得自己說了算。
這類問題的麻煩不在修,在找。
你得在十個外掛裡一個一個停用測試,而網站是活的,有學員正在上課。
▋第二個坑:台灣金流跟發票
WooCommerce 原生支援的金流,沒有一家是台灣的。
你需要第三方的綠界/藍新橋接外掛。這些外掛多半是台灣的個人開發者或小工作室做的,品質參差,而且能不能持續維護,沒有保證。
用了三年,某天開發者不做了,你就卡在那個版本,直到 WooCommerce 或 PHP 升級把它弄壞。
這就是 WordPress 版的 left-pad:不一定有人生氣下架,有時只是作者沒空了。
電子發票更麻煩。這不只是「串一個 API」,你要處理:
- 開立(付款成功後自動觸發)
- 四種載具(雲端、手機條碼、統編、捐贈)在結帳頁的選擇邏輯
- 作廢(當月)
- 折讓(跨月)
- 部分退款對應的部分折讓
- 上傳財政部平台的重試機制
每一項都是程式。
市面上有外掛做這件事,但你得確認它支援你的金流商、你的 LMS,而且三者版本相容。
很多人的實際做法是半自動:系統收款,然後每天手動去發票平台補開。
一天十筆還能忍,一天五十筆,你就會開始考慮換系統。
▋第三個坑:影片與頻寬
課程影片要放哪裡?
🔍 點擊放大放自己的主機:頻寬會爆。一支 500MB 的影片,十個學員同時看就是 5GB 的流量。虛擬主機有流量上限,超過就限速或加錢。而且 WordPress 本身不是為影片串流設計的,沒有自適應畫質,學員網路差一點就一直轉圈圈。
放 YouTube 不公開:免費,但學員可以直接把連結分享出去,而且 YouTube 的推薦影片會把人帶走。
放 Vimeo:付費方案有網域鎖定,但月費不便宜,跟 LMS 的整合也要另外處理。
用 Bunny/Cloudflare Stream:技術上最好,但要自己接 API、處理簽名網址、做防盜連。這已經超出「裝個外掛」的範圍了。
還有浮水印。如果你想在影片上疊學員的 Email 來嚇阻外流,WordPress 生態沒有現成方案,得自己寫。
▋隱形成本:你的時間
前面三個坑都還算具體。真正吃掉你的,是維護。
每個月要做的事:更新十幾個外掛(更新前要備份,因為可能會壞)、看有沒有安全漏洞公告、檢查網站有沒有變慢、處理某個學員說某頁跑版。
一次半小時到兩小時,一年下來就是一到兩個工作週。
而這些時間不會產生任何營收。你的課不會因為外掛都更新到最新版,就多賣一堂。
▋什麼時候該考慮換
不是所有人都需要搬。判斷標準如下。
可以繼續用 WordPress,如果:
- 你的課程少(一兩堂)、學員量不大
- 你自己懂技術,出事你修得了
- 網站有大量既有內容和 SEO 資產,搬家風險大於效益
- 你需要高度客製化,而且你有能力做
該考慮換,如果:
- 你每個月花在維護上的時間超過兩小時
- 你已經遇過「付款成功但沒開通」這類事故
- 發票還在手動開
- 你想加的功能(多講師分潤、AI 客服、多語系)需要再裝三個外掛
- 你想專心做內容,不想再管技術
▋搬家是怎麼回事
決定要搬,最大的顧慮通常是:「舊的東西怎麼辦?」
🔍 點擊放大InfoBox 後台有 WordPress 搬入功能,可以把既有內容轉進來。實務上要注意幾件事:
文章與頁面:可以搬,但版面樣式不會完全一樣,需要檢查。
學員資料:可以匯入(後台學員頁有批次匯入),但密碼不能搬。密碼是加密雜湊過的,沒有系統能還原。標準做法是匯入後,寄一封「重設密碼」信給所有學員。
購買紀錄:能不能對上,要看你原本資料的完整度。建議搬家前先匯出一份 CSV 備份。
網址結構:這是 SEO 的關鍵。舊網址如果改變,一定要做 301 轉址(後台有轉址設定),否則你多年累積的搜尋排名會歸零。
搬家的正確順序:先搬內容 → 檢查 → 設 301 → 換 DNS → 觀察一週 → 舊站再放一個月不要關。
▋自由 vs 有人幫你顧
WordPress 的優勢是自由。你想做什麼都能做,只要願意投入時間或金錢。生態龐大,找得到人幫你做。
🔍 點擊放大SaaS 的優勢是有人幫你維護。功能沒那麼自由,但金流、發票、影片、安全性都是平台的責任,出事有人接。
選哪個,取決於一件事:你的時間值多少錢。
如果你的專業是教學,每個月花兩小時修外掛就是虧的。如果你享受折騰技術,WordPress 給你的掌控感,是 SaaS 給不了的。
沒有標準答案,但這筆帳你該算清楚。
▋我的看法
很多用 WordPress 開課的人來找我們時,心裡的感覺大概是:其實也沒有壞,只是很累。
沒壞,是因為你每月默默在修;很累,是因為修的東西學員根本看不到。
我們的建議是:先算一下過去三個月花在外掛上的時間。超過六小時,就值得認真比較一次。
left-pad 事件之後,npm 改了規則,再也不讓人隨手下架別人依賴的套件。
但你的 WordPress 外掛,沒有這條規則保護。
它的作者明天可能還在,也可能只是,沒空了。
願你的網站,每一行程式碼都有人顧著。
(寫到這裡,我們決定先去把自己電腦上那排「有可用更新」的通知按掉。不是更新,是按掉。)
下一篇:〈課程賣不動的五個原因,其中四個跟平台有關〉
💡 想知道從 WordPress 搬過來實際會遇到什麼?留下你的網址,我們先幫你看現在的站
資料來源:Chris Williams,〈How one developer just broke Node, Babel and thousands of projects in 11 lines of JavaScript〉,The Register,2016 年 3 月 23 日
