npm 和 yarn 快取策略對比

meikidd發表於2017-06-08

前幾天 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

相關文章