原文:https://zhuanlan.zhihu.com/p/24357770前端
網上的 npm 教程主要都在講怎麼安裝、配置和使用 npm,卻不告訴新人「爲何要使用 npm」。今天我就來說講這個話題。node
本文目標讀者是「不太瞭解 npm 的新人」,大神您別看了,否則又說我囉嗦了 😂。jquery
程序員自古以來就有社區文化:git
社區的意思是:擁有共同職業或興趣的人們,自發組織在一塊兒,經過分享信息和資源進行合做。虛擬社區的參與者常常會在線討論相關話題,或訪問某些網站。
前端程序員也有社區,世界上最大的前端社區應該就是 GitHub 了。前端經過 GitHub 來程序員
加入社區最大的好處之一是,你可使用別人貢獻的代碼,你也能夠貢獻代碼給別人用。github
前端是怎麼共享代碼的呢?npm
在 GitHub 尚未興起的年代,前端是經過網址來共享代碼json
好比你想使用 jQuery,那麼你點擊 jQuery 網站上提供的連接就能夠下載 jQuery,放到本身的網站上使用bootstrap
GItHub 興起以後,社區中也有人使用 GitHub 的下載功能:服務器
當一個網站依賴的代碼愈來愈多,程序員發現這是一件很麻煩的事情:
有些程序員就受不鳥了,一個擁有三大美德的程序員 Isaac Z. Schlueter (如下簡稱 Isaaz)給出一個解決方案:用一個工具把這些代碼集中到一塊兒來管理吧!
這個工具就是他用 JavaScript (運行在 Node.js 上)寫的 npm,全稱是 Node Package Manager
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。(其實其餘語言也是這樣的)
因此,社區的力量是巨大的。