前幾天 npm@5 發佈,其中最大的改進是對緩存策略的更新,本文對比一下 npm@5 和 yarn 的緩存策略。npm
npm cache 提供了三個命令,分別是npm cache add
, npm cache clean
, npm cache verify
。緩存
npm cache add
官方解釋說這個命令主要是 npm 內部使用,可是也能夠用來手動給一個指定的 package 添加緩存。(This command is primarily intended to be used internally by npm, but it can provide a way to add data to the local installation cache explicitly.)網絡
npm cache clean
刪除緩存目錄下的全部數據。從 npm@5 開始,爲了保證緩存數據的有效性和完整性,須要加上 --force
參數。koa
npm cache verify
驗證緩存數據的有效性和完整性,清理垃圾數據。ide
npm 的緩存目錄是經過 cache 變量指定的,通常默認是在 ~/.npm
文件夾(Windows 系統在 %AppData%/npm-cache
文件夾),能夠執行下面的命令查看code
npm config get cache
在 npm@5 之前,每一個緩存的模塊在 ~/.npm
文件夾中以模塊名的形式直接存儲,例如 koa 模塊存儲在 ~/.npm/koa
文件夾中。而 npm@5 版本開始,數據存儲在 ~/.npm/_cacache
中,而且不是以模塊名直接存放。blog
npm 的緩存是使用 pacote 模塊進行下載和管理,基於 cacache 緩存存儲。因爲 npm 會維護緩存數據的完整性,一旦數據發生錯誤,就回從新獲取。所以不推薦手動清理緩存,除非須要釋放磁盤空間,這也是要強制加上 --force
參數的緣由。ci
目前沒有提供用戶本身管理緩存數據的命令,隨着你不斷安裝新的模塊,緩存數據也會愈來愈多,由於 npm 不會本身刪除數據。文檔
npm 提供了離線安裝模式,使用 --offline
, --prefer-offline
, --prefer-online
能夠指定離線模式。get
--prefer-offline
/ --prefer-online
「離線優先/網絡優先」模式。
若是設置爲 --prefer-offline
則優先使用緩存數據,若是沒有匹配的緩存數據,則從遠程倉庫下載。
若是設置爲 --prefer-online
則優先使用網絡數據,忽略緩存數據,這種模式能夠及時獲取最新的模塊。
--offline
徹底離線模式,安裝過程不須要網絡,直接使用匹配的緩存數據,一旦緩存數據不存在,則安裝失敗。
yarn cache 提供了三個命令,分別是yarn cache ls
, yarn cache dir
, yarn cache clean
。
yarn cache ls
列出當前緩存的包列表。
yarn cache dir
顯示緩存數據的目錄。
yarn cache clean
清除全部緩存數據。
官方文檔沒有詳細介紹緩存策略,不過進入緩存目錄也能夠看出一些端倪。在 ~/Library/Caches/Yarn
文件夾中,每一個緩存的模塊被存放在獨立的文件夾,文件夾名稱包含了模塊名稱、版本號等信息。
yarn 默認會使用 「prefer-online」 的模式,也就是先嚐試從遠程倉庫下載,若是鏈接失敗則嘗試從緩存讀取。yarn 也提供了 --offline
參數,即經過 yarn add --offline
安裝依賴。
另外 yarn 還支持配置離線鏡像,經過如下命令設置離線緩存倉庫。具體細節參照官方博客《Running Yarn offline》。
yarn config set yarn-offline-mirror ./npm-packages-offline-cache