2017-07-04 99 views
20

我不小心在使用Yarn的項目中運行npm install,並注意到npm創建了一個package-lock.json文件。yarn.lock和npm的包裝鎖之間有什麼區別?

我知道紗線的流行部分是因爲它使用鎖文件來生成比npm更可靠和更確定的依賴項安裝,而npm只有一個殘缺的shrinkwrap feature,但現在我不確定要做什麼這npm lockfile業務以及是否有任何關於繼續使用Yarn的說服力。

所以在previous Q and A on StackOverflow on yarn vs shrinkwrap的精神,我想請問下:

  • 是否有在可靠性方面這兩個包裝管理者之間的任何實質性差別了嗎?
  • 如果不是,除了「更多表情符號」之外,是否有任何令人信服的理由繼續使用紗線?
+2

https://yarnpkg.com/blog/2017/05/31/determinism/可能會有所幫助。看起來npm 5在這方面幾乎與紗線相當。 –

回答

10

在紙上,紗線和NPM 5看起來幾乎相當。它們都具有確定性鎖定文件,並且在功能上幾乎相互匹配。有人會說紗是促成NPM創新的催化劑。

但是,在經歷了一個月的NPM 5後,我的團隊決定轉移到Yarn。

NPM在技術上具有「更確定性」的鎖定文件,因爲在NPM版本中有一個理論保證,NPM將生成完全相同的node_modules文件夾。另一方面,Yarn的依賴關係的確切提升/排序取決於紗線版本,並且可能會改變紗線版本。總的來說,這個影響很小。

爲什麼要用紗線呢?合併&可靠性。

紗線作出輕微的決定權衡取捨,以實現更簡單的yarn.lock文件,該文件更易於合併。如果你是一個獨立開發者,這可能不會對你產生影響,但是如果你在一個團隊中有多個合作者提交依賴項更改,它很快就會成爲一個巨大的問題。 NPM的package-lock實際上是不可合併的,你最終不得不重新產生或掙扎。另一方面,通過Yarn,合併很容易且可預測。

參見:https://yarnpkg.com/blog/2017/05/31/determinism/

作爲一個側面說明,我們也發現紗線平均值爲更可靠。

+0

關於合併,我不知道我是否會同意使用yarn.lock這樣做的「輕鬆」。幾周前我遇到了這個問題,並發現了這種對話,基本上說,你應該重新生成,但是要以特定的方式進行。 https://github.com/yarnpkg/yarn/issues/1776#issuecomment-269539948 – jktravis

相關問題