NPM 3.0 要來了

jopen 9年前發布 | 7K 次閱讀 NPM

原文  http://mp.weixin.qq.com/s?__biz=MzA3OTQwNTM2Ng==&mid=203444042&idx=1&sn=a7bb09bed40baed830f7893068db71c2

by @goddyzhao

本文先帶大家回顧一點小歷史,請看下面一張圖:

NPM 3.0 要來了

這張圖對于Node開發者來說應該是再熟悉不過了,是當年Node之父Ryan Dahl“退位讓賢”給 Isaac Schlueter 時的一張漫畫圖,那年是 2012年1月 。就在兩年后,也就是 2014年1月 ,Issac又“讓賢”給了當時Joyent的一個名叫 TJ Fontaine (此TJ非彼TJ,請務必淡定)的工程師,自己轉而專門為NPM成立了一家公司—— npm, Inc ,大家現在用的NPM公共倉庫就是該公司一項免費服務,除此之外,它還為企業提供了私有NPM倉庫等增值付費服務。

現在時間到了2015年,如今的NPM已經不再單單是為Node提供包管理的服務了,正如它官網所提到的,它的目標是成為更General的包管理器。截止到本文撰寫時,NPM已有 131430 個模塊了,可謂體量巨大。同時就在前幾天,NPM官方宣布 NPM 3.0就要來了

那么下面,我們就來看看NPM 3.0到底有哪些亮點:

  1. CLI將拆分成多個小模塊并以API的形式對外提供服務

  2. npm cache要重寫,將支持離線模式

  3. npm install的具體內部實現邏輯將要改寫

以上三點是筆者認為最大的亮點,除此之外,NPM 3.0還有很多改善,諸如: 更好的報錯機制 更好的搜索模塊體驗 windows下路徑的支持改善 等等,這里就不一一贅述了。下面就重點講講上面的三點吧。

CLI將拆分成多個小模塊并以API的形式對外提供服務

首先官方指出這么做的原因主要是:社區很多人不斷給NPM提出新的需求,一會兒要求NPM要支持 自定義腳本的hook 、一會兒又要 NPM CLI提供可定制化 等等。盡管這些需求確確實實是非常有價值的,但是官方不想給NPM無限制的加功能,讓它變得很臃腫,背離了Issac心中小而美的初衷。于是呢,就將 NPM中不同的功能模塊拆分出來,獨立成一個個子項目,從而實現給NPM“瘦身”,然后不同的模塊通過對外提供統一的API接口來實現互相的協作。

大家是不是想到了Unix哲學?沒錯,每個模塊完成特定的任務,互相之間解耦。這種做法也屬于非常常見的“瘦身”做法,connect 3.0就是最好的例子。這樣做的好處也是顯而易見的:

  1. NPM核心模塊會變得非常輕量級

  2. 子模塊變得更好維護

  3. 子模塊測試起來更容易

  4. 模塊之間可插拔,功能通過“搭積木式”的方式來組合

這種改變對于開發者來說,個人認為應當是透明的。NPM應該會將滿足常規需求的子模塊在你安裝NPM的時候就自動安裝好,如果需要額外擴展模塊就單獨安裝。所以,基本不影響開發者。

npm cache要重寫,將支持離線模式

npm cache目前的cache機制簡單來說就是將下載下來的模塊的tar包,默認放在 ~/.npm/{module}/{version} 目錄中(其中 ~/.npm 是可以通過 npm config 來配置的),通過寫入一個 .cache.json 文件來記錄一些 meta 信息,如: etag 值等。這樣就可以當你下次再安裝這個模塊的時候,檢查是否緩存版本有效,有效則直接本地讀取否則就再通過網絡去請求。但是這種緩存機制不支持通過 githttp url 方式安裝的模塊。內部緩存模塊實現機制有很多缺點(關于這部分,筆者以后會專門寫文章介紹)。

那么對于NPM 3.0中這部分具體如何重寫官方沒有透露太多細節,只知道重寫后:

  1. 讓緩存的內容可訪問,這樣類似shrinkwrap這樣的工具就不需要經常去訪問網絡

  2. 將緩存部分功能單獨成獨立的API

  3. 支持離線

以上幾點的改進其實有點類似一個名為 npmd 的模塊,它就是為了解決現有 npm cache 問題而生的,看來NPM 3.0借鑒了很多來自于它的idea。

對于開發者而言,特別是國內開發者而言,緩存機制的完善和離線模式的支持,多多少少對我們這種訪問npm源如龜速的朋友是收益多多的。(當然,要單純提高速度可以使用淘寶提供的鏡像——CNPM)。

npm install的具體內部實現邏輯將要改寫

目前大家通過 npm install 某個模塊時,就會出現一個 loading 狀態的指針,然后就長時間在那里轉啊轉,完全不知道干了什么。如果實在長時間不動呢,還可以通過 npm install --verbose 來看看日志。而且現階段的 npm install 是將依賴分析和安裝,這兩個過程混在一起的。因此,NPM 3.0重寫這部分實現后,將:

  1. 將這兩部分分離,并且整體實現更加簡化

  2. 同時會提供更好的依賴關系輸出

其實這部分改寫聽起來還是和 npmd resolve 以及 npmd install 有點相似。不過這不重要,重要的是對于開發者而言安裝將會更加友好。

總結下來,對于開發者(NPM使用者)來說,NPM 3.0 絕大部分的改進都是透明的,最終會帶來更好的體驗。但是對于NPM自身來說,意味是深遠。這次改進正是為了更好地成為更通用的包管理器而邁出的一大步!

我們所有的文章均在https://github.com/jieio/du開源,歡迎提問和投稿

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!