npm 是幹什麼的?(非教程)

方應杭在飢人谷發表於2019-02-28

網上的 npm 教程主要都在講怎麼安裝、配置和使用 npm,卻不告訴新人「為什麼要使用 npm」。今天我就來講講這個話題。
本文目標讀者是「不太瞭解 npm 的新人」,大神您別看了,不然又說我囉嗦了 ?。

社群

程式設計師自古以來就有社群文化:

社群的意思是:擁有共同職業或興趣的人們,自發組織在一起,通過分享資訊和資源進行合作。虛擬社群的參與者經常會線上討論相關話題,或訪問某些網站。

前端程式設計師也有社群,世界上最大的前端社群應該就是 GitHub 了。前端通過 GitHub 來

  • 分享原始碼(線上程式碼倉庫)
  • 討論問題(Issue 列表)
  • 收集學習資源和常去的網站(比如我收集的優質中文前端部落格

加入社群最大的好處之一是,你可以使用別人貢獻的程式碼,你也可以貢獻程式碼給別人用。

共享程式碼

前端是怎麼共享程式碼的呢?

在 GitHub 還沒有興起的年代,前端是通過網址來共享程式碼

比如你想使用 jQuery,那麼你點選 jQuery 網站上提供的連結就可以下載 jQuery,放到自己的網站上使用

npm 是幹什麼的?(非教程)

GItHub 興起之後,社群中也有人使用 GitHub 的下載功能:

npm 是幹什麼的?(非教程)

麻煩

當一個網站依賴的程式碼越來越多,程式設計師發現這是一件很麻煩的事情:

  1. 去 jQuery 官網下載 jQuery
  2. 去 BootStrap 官網下載 BootStrap
  3. 去 Underscore 官網下載 Underscore
  4. ……

有些程式設計師就受不鳥了,一個擁有三大美德的程式設計師 Isaac Z. Schlueter (以下簡稱 Isaaz)給出一個解決方案:用一個工具把這些程式碼集中到一起來管理吧!

這個工具就是他用 JavaScript (執行在 Node.js 上)寫的 npm,全稱是 Node Package Maganer

具體步驟

NPM 的思路大概是這樣的:

  1. 買個伺服器作為程式碼倉庫(registry),在裡面放所有需要被共享的程式碼

  2. 發郵件通知 jQuery、Bootstrap、Underscore 作者使用 npm publish 把程式碼提交到 registry 上,分別取名 jquery、bootstrap 和 underscore(注意大小寫)

  3. 社群裡的其他人如果想使用這些程式碼,就把 jquery、bootstrap 和 underscore 寫到 package.json 裡,然後執行 npm install ,npm 就會幫他們下載程式碼

  4. 下載完的程式碼出現在 node_modules 目錄裡,可以隨意使用了。

這些可以被使用的程式碼被叫做「包」(package),這就是 NPM 名字的由來:Node Package(包) Manager(管理器)。

發展

Isaaz 通知 jQuery 作者 John Resig,他會答應嗎?這事兒不一定啊,對不對。

只有社群裡的人都覺得 「npm 是個寶」的時候,John Resig 才會考慮使用 npm。

那麼 npm 是怎麼火的呢?

npm 的發展是跟 Node.js 的發展相輔相成的。

Node.js 是由一個在德國工作的美國程式設計師 Ryan Dahl 寫的。他寫了 Node.js,但是 Node.js 缺少一個包管理器,於是他和 npm 的作者一拍即合、抱團取暖,最終 Node.js 內建了 npm。

後來的事情大家都知道,Node.js 火了。

隨著 Node.js 的火爆,大家開始用 npm 來共享 JS 程式碼了,於是 jQuery 作者也將 jQuery 釋出到 npm 了。

所以現在,你可以使用 npm install jquery 來下載 jQuery 程式碼。

現在用 npm 來分享程式碼已經成了前端的標配。

後續

Node.js 目前由 Ryan Dahl 當時所在的公司 joyent 繼續開發。Ryan Dahl 現在已經去研究 AI 和機器學習了,並且他把 Node.js 的維護權交給了 Isaaz。(我是不是也應該去研究 AI 和機器學習啊教練)

而 Isaaz 維護了一段時間後,辭職了,成立了一個公司專門維護 npm 的 registry,公司名叫做 npm 股份有限公司……誰說開源不能賺錢的~

社群的力量

回顧前端的發展是你會發現,都是社群裡的某個人,釋出了一份程式碼,最終影響前端幾年的走向。比如 jQuery,比如 Node.js,比如 npm。(其實其他語言也是這樣的)
所以,社群的力量是巨大的。

想加入飢人谷學習社群,請加Q群:108801207

預告

請期待下篇:

《如何用 npm 釋出我的程式碼》

《如何用 npm 下載別人的程式碼》

(我又挖了倆坑)

相關文章