前幾天 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
引數。
npm cache verify
驗證快取資料的有效性和完整性,清理垃圾資料。
快取策略
npm 的快取目錄是通過 cache 變數指定的,一般預設是在 ~/.npm
資料夾(Windows 系統在 %AppData%/npm-cache
資料夾),可以執行下面的命令檢視
npm config get cache
在 npm@5 以前,每個快取的模組在 ~/.npm
資料夾中以模組名的形式直接儲存,例如 koa 模組儲存在 ~/.npm/koa
資料夾中。而 npm@5 版本開始,資料儲存在 ~/.npm/_cacache
中,並且不是以模組名直接存放。
npm 的快取是使用 pacote 模組進行下載和管理,基於 cacache 快取儲存。由於 npm 會維護快取資料的完整性,一旦資料發生錯誤,就回重新獲取。因此不推薦手動清理快取,除非需要釋放磁碟空間,這也是要強制加上 --force
引數的原因。
目前沒有提供使用者自己管理快取資料的命令,隨著你不斷安裝新的模組,快取資料也會越來越多,因為 npm 不會自己刪除資料。
離線安裝
npm 提供了離線安裝模式,使用 --offline
, --prefer-offline
, --prefer-online
可以指定離線模式。
--prefer-offline
/ --prefer-online
“離線優先/網路優先”模式。
如果設定為
--prefer-offline
則優先使用快取資料,如果沒有匹配的快取資料,則從遠端倉庫下載。如果設定為
--prefer-online
則優先使用網路資料,忽略快取資料,這種模式可以及時獲取最新的模組。
--offline
完全離線模式,安裝過程不需要網路,直接使用匹配的快取資料,一旦快取資料不存在,則安裝失敗。
yarn
快取命令
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