網(wǎng)上的 npm 教程主要都在講怎么安裝、配置和使用 npm ,卻很少告訴新人「npm 是干什么的?」「為什么要使用 npm?」。今天我就來講講這個(gè)話題。本文目標(biāo)讀者是「不太了解 npm 的新人」,老司機(jī)請(qǐng)繞道。
社區(qū)
程序員自古以來就有社區(qū)文化。社區(qū)的意思是:擁有共同職業(yè)或興趣的人們,自發(fā)組織在一起,通過分享信息和資源進(jìn)行合作。虛擬社區(qū)的參與者經(jīng)常會(huì)在線討論相關(guān)話題,或訪問某些網(wǎng)站。 前端程序員也有社區(qū),世界上最大的前端社區(qū)應(yīng)該就是 GitHub 了。前端通過 GitHub 來分享源代碼(線上代碼倉庫),討論問題(Issue 列表),收集學(xué)習(xí)資源和常去的網(wǎng)站(比如我收集的優(yōu)質(zhì)中文前端博客)。加入社區(qū)最大的好處之一是,你可以使用別人貢獻(xiàn)的代碼,你也可以貢獻(xiàn)代碼給別人用。
共享代碼
前端是怎么共享代碼的呢?在 GitHub 還沒有興起的年代,前端是通過網(wǎng)址來共享代碼。比如你想使用 jQuery ,那么你點(diǎn)擊 jQuery 網(wǎng)站上提供的鏈接就可以下 jQuery ,放到自己的網(wǎng)站上使用 。GItHub 興起之后,社區(qū)中也有人使用 GitHub 的下載功能。
麻煩
當(dāng)一個(gè)項(xiàng)目依賴的代碼越來越多,程序員發(fā)現(xiàn)這是一件很麻煩的事情:
1.去 jQuery 官網(wǎng)下載 jQuery
2.去 BootStrap 官網(wǎng)下載 BootStrap
3.去 Underscore 官網(wǎng)下載 Underscore
......
有些程序員就受不鳥了,一個(gè)擁有三大美德的程序員 Isaac Z. Schlueter (以下簡稱 Isaaz)給出了一個(gè)解決方案:用一個(gè)工具把這些代碼集中到一起來管理吧!這個(gè)工具就是他用 JavaScript (運(yùn)行在 Node.js 上)寫的 npm,全稱是 Node Package Manager。
npm的思路大概是這樣的:
1.買個(gè)服務(wù)器作為代碼倉庫(repository),在里面放所有需要被共享的代碼
2.發(fā)郵件通知 jQuery 、Bootstrap 、Underscore 的作者使用 npm publish 把代碼提交到 repository 上,分別取名 jquery、bootstrap 和 underscore(注意大小寫)
3.社區(qū)里的其他人如果想使用這些代碼,就把 jquery、bootstrap 和 underscore 寫到 package.json 里,然后運(yùn)行 npm install ,npm 就會(huì)幫他們下載代碼
4.下載完的代碼出現(xiàn)在 node_modules 目錄里,就可以隨意使用了。
這些可以被使用的代碼被叫做「包」(package),這就是 npm名字的由來:Node Package(包) Manager(管理器)。
發(fā)展
Isaaz 通知 jQuery 作者 John Resig,他會(huì)答應(yīng)嗎?這事兒不一定啊,對(duì)不對(duì)。只有社區(qū)里的人都覺得 「npm 是個(gè)寶」的時(shí)候,John Resig 才會(huì)考慮使用 npm。
那么 npm 是怎么火的呢?
npm 的發(fā)展是跟 node.js 的發(fā)展相輔相成的。node.js 是由一個(gè)在德國工作的美國程序員 Ryan Dahl 寫的。他寫了 node.js,但是 node.js 缺少一個(gè)包管理器,于是他和npm的作者一拍即合、抱團(tuán)取暖,最終 node.js 內(nèi)置了 npm。
后來的事情大家都知道,node.js 火了。隨著 node.js 的火爆,大家開始用 npm 來共享 JS 代碼了,于是 jQuery 作者也將 jQuery 發(fā)布到 了 npm 上。所以現(xiàn)在,你可以使用 npm install jquery 來下載 jQuery 代碼了。現(xiàn)在用 npm 來分享代碼已經(jīng)成了前端的標(biāo)配。
后續(xù)
node.js 目前由 Ryan Dahl 當(dāng)時(shí)所在的公司 joyent 繼續(xù)開發(fā)。Ryan Dahl 現(xiàn)在已經(jīng)去研究 AI 和機(jī)器學(xué)習(xí)了,并且他把 node.js 的維護(hù)權(quán)交給了 Isaaz。而 Isaaz 維護(hù)了一段時(shí)間后,辭職了,成立了一個(gè)公司專門維護(hù) npm 的 repository,公司名叫做 npm 股份有限公司......誰說開源不能賺錢的呀???
社區(qū)的力量
回顧前端的發(fā)展史你會(huì)發(fā)現(xiàn),一般都是社區(qū)里的某個(gè)人,發(fā)布了一份代碼,最終影響前端接下來幾年的走向。比如 jQuery,比如 node.js,比如 npm,其實(shí)其它語言也是這樣的,所以說,社區(qū)的力量是巨大的。