[譯]yarn vs npm: 你需要知道的一切

這篇文章已經被 Adrian Sandu, Marcello La Rocca, Matt Burnett, Nuria Zuazo and Vildan Softic 審稿過了。

Yarn 是由 Facebo,google,Exponent 和 Tilde 制作的一種新的JavaScript 軟件包管理器。可以在官方公告上看到,其目的是解決團隊在 npm 面臨的問題,即

  • 安裝包不足夠 快/連續
  • 有安全隱患,npm 允許安裝包執行代碼

但是,別慌! 這并不是說要去完全替代 npm。yarn 是從 npm 注冊表獲取模塊的唯一的一個新的CLI 客戶端。對注冊表本身沒有任何的改變——你依舊可以跟以前一樣獲取和發布包。

現在所有人都應該上 Yarn 的宣傳車了嗎?這些都是你用 npm 體驗不到的。在這篇文章,我們將比較 npm 和 yarn,你可以比較哪個更適合你。

Yarn vs npm: 功能上的差異

乍一看,yarn 和 npm 看起來差不多。當我們看下底層的時候,我們可以知道 yarn 不一樣在哪里。

yarn.lock 文件

packege.json 文件可以讓 npm 和 yarn 跟蹤到項目的依賴,但是其版本號并不總是很準確。相反,你可以定義一個版本范圍。這種方式,你可以選擇包的一個特定的主要和次要的一個版本,但允許npm 安裝最新的補丁(可以修正一些錯誤)。

在一個理想世界的語義版本,補丁版本不包含任何重大更改。不幸的是,這并不總是對的。npm 采用的策略可能會導致同一package.json文件兩機,具有不同版本的安裝包,可能引入錯誤。 npm 采用的策略可能會導致同一 package.json文件兩機,安裝不同版本的安裝包,可能會造成引入錯誤。

為了避免包版本引入錯誤,一個確切的安裝版本被固定在一個 lock 文件中。每次加入一個模塊, yarn 便創建(或更新)一個 yarn.lock 文件。 這種方式可以保證另一臺機器上安裝同樣的包,同時還可以在package.json中定義一系列允許的版本。在 npm 中, npm shrinkwrap 命令也可以生成一個 lock 文件,然后 npm install 在讀 package.json 前,先從 lock 文件中讀取,就像 yarn 先讀 yarn.lock文件先一樣。重要的區別是 yarn 總是創建和更新 yarn.lock,而 npm 不會只創建一個默認的并且僅僅在 npm-shrinkwrap.json 存在的時候更新它。

  1. yarn.lock 文檔
  2. npm shrinkwrap 文檔

平行安裝

無論什么時候 npm 或者 yarn 需要安裝一個包,它會執行一系列的任務。
在 npm,這些任務按順序并且在每個包中都執行,意味著它將會在一個包完全安裝的時候才跳到下個包。
yarn 則并行的執行這些任務,提高了性能。
相比之下,我在沒有 shrinkwrap/lock 文件和緩存的情況下, 使用 npm 和 yarn 安裝 express 包。總共安裝了 42 個包。

  • npm: 9 秒
  • yarn: 1.37 秒

重復相同的步驟還是產生類似的結果。然后我安裝 gulp , 結果有 195 個依賴包。

  • npm: 11 秒
  • Yarn: 7.81 秒

似乎較小的區別取決于正在安裝包的數量。無論哪種方式, yarn 始終更快。

更簡潔的輸出(cleaner output)

默認情況下 npm 的輸出非常詳細。比如,它在執行 npm install <package> 的時候,遞歸地列出所有已安裝的包。相反 yarn 一點都不詳細。當細節可以通過其他命令時,它使用貼切的表情展示出相當少的信息(除非是在 windows 上)。

1476651912yarn-install-output.png

Yarn vs npm: CLI 的區別

除了一些功能差異, Yarn 也有不同的命令。有些 npm 已經刪除的命令,還有修改和添加了一些有趣的命令。

yarn global

不像 npm , 全局操作在使用 -g 或者 --global 標志的命令的時候執行,Yarn 命令需要帶有 global 前綴。跟 npm 一樣,特定項目的依賴不需要全局安裝。

global 前綴只對 yarn add, yarn binyarn lsyara remove 有效。除了 yarn add,這些命令跟 npm 的是等價的。

  1. yarn global documentation

yarn install

npm install 命令會從 package.json 文件安裝依賴,并且允許添加新的包。
yarn install 僅僅順序的安裝 yarn.lock 或者 package.json 列出的依賴。

  1. yarn install 文檔
  2. npm install 文檔

yarn add [–dev]

npm install <package>一樣,yarn add <package> 允許你添加或者安裝一個依賴。
正如命令名稱所暗示的一樣,它添加了一個依賴,意味著它會自動保存一個包的引用到 package.json 中,就跟 npm 的 --save 標志做的一樣。
Yarn 的 --dev 標記添加包作為開發依賴,就跟 npm 的 --save-dev標記一樣。

  1. yarn add documentation
  2. npm install documentation

yarn licenses [ls|generate-disclaimer]

在撰寫本文的時間為止,沒有npm等效可用。
yarn licenses ls 列出了所有安裝包的許可證。
yarn licenses generate-disclaimer 生成一個免責聲明包含所有執照的所有包的內容。在你的項目中,你必須包括項目的許可證,在這些狀態下,這是一個相當有用的工具。

  1. yarn licenses documentation

yarn why

這個命令窺探到依賴圖,找出為什么包是安裝在您的項目。也許你顯式地添加它,也許這是一個依賴的包安裝。yarn why幫助你弄清楚。

  1. yarn why documentation

yarn upgrade [package]

這個命令會更新包到符合設置在 package.json版本的最新的版本并且重建 yarn.lock。這類似于 npm update.

有趣的是,當指定一個包,包會更新到最新版本和更新package.json中定義的標簽。這意味著該命令可能更新包到一個新的主要版本

  1. yarn upgrade documentation

yarn generate-lock-entry

yarn generate-lock-entry命令基于 package.json的依賴生成一個 yarn.lock文件。這類似于 npm shrinkwrap。這個命令應該小心使用,當通過 yarn addyarn upgrade添加和更新依賴的時候,lock 文件會自動生成和更新。

  1. yarn generate-lock-entry documentation
  2. npm shrinkwrap documentation

穩定性和可靠性

Yarn 宣傳火車會出軌? 在第一天發布到公眾的時候,確實收到了很多的問題,但是解決問題的速度也是驚人的。同時聲明,社區正在努力查找和刪錯 bugs。看問題的數量和類型, Yarn 對于大多數用戶來說是穩定的,但可能不適合邊界情況。

注意,盡管包管理器對您的項目可能是至關重要的,它只是一個包管理器。如果出現錯誤,重新安裝包也不困難,而不是重新回到 npm 的懷抱。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,316評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,481評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,241評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,939評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,697評論 6 409
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,182評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,247評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,406評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,933評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,772評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,973評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,516評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,638評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,866評論 1 285
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,644評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,953評論 2 373

推薦閱讀更多精彩內容