簡體   English   中英

我應該有 Travis 緩存 node_modules 還是 $HOME/.npm

[英]Should I have Travis cache node_modules or $HOME/.npm

我很困惑哪個目錄最適合緩存。 我見過使用過和推薦過的,但沒有實際比較為什么要采用一種方式或另一種方式。

例如,Travis 博客本身推薦:

cache:
  directories:
    - node_modules

但是, 成千上萬的地方使用它:

cache:
  directories:
    - $HOME/.npm

那么為什么要使用一個而不是另一個,為什么不包括兩者呢?

我注意到緩存node_modules文件夾會導致問題(構建失敗),而緩存.npm緩存避免了它。 我相信這是因為.npm緩存不存儲編譯的本機模塊,而node_modules文件夾存儲。 因此,當您測試不同版本的node ,正如在 Travis-CI 中常見的那樣,它會嘗試加載為node 6 和 barf 中的node 4 編譯的本機模塊。

跟進@John 的回答

為了嚴格遵守package-lock.json上的package-lock.json ,Travis CI 上的 NPM 安裝過程現在默認為新的npm ci (我認為ci代表持續集成)而不是npm install 這有助於防止安裝不遵循正確語義版本控制的軟件包。

為此, npm ci需要首先擺脫依賴圖和node_modules所有緩存編譯模塊從以前的構建中重構依賴圖。 它通過在開始自己的安裝之前完全刪除node_modules 但這也意味着node_modules不能再用作 Travis 上的緩存位置。 我們現在必須使用"$HOME/.npm"來緩存,@ "$HOME/.npm"已經解釋了使用"$HOME/.npm"的原因。 如果您繼續使用node_modules作為緩存位置,Travis 會向您拋出一個錯誤,抱怨"/node_modules/.bin/npm cannot be found" ,因為在運行npm cinode_modules已被刪除。

現在關於使用哪個緩存位置......

  1. $HOME/.npm

    當您想使用現在默認的npm ci ,請將這些更改包含在您的.travis.yml

     # [optional] `npm ci` is now default on Travis install: - npm ci # Keep the npm cache around to speed up installs cache: directories: - "$HOME/.npm"
  2. node_modules

    如果你想堅持舊的npm install

     # Specify `npm install` install: - npm install # Continue to use the old cache location cache: directories: - "node_modules"

警告:您的緩存位置取決於您選擇的安裝方法,並且不能與其他方法交織在一起。 否則,您可能會失去緩存的好處,或者更糟的是,Travis 構建失敗。

您可以在NPM 文檔中找到有關npm ci更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM