簡介
Yarn 是 Facebook, Google, Exponent 和 Tilde 開發的一款新的 JavaScript 包管理工具。就像我們可以從官方文檔了解那樣,它的目的是解決這些團隊使用 npm 面臨的少數問題,即:
- 安裝的時候無法保證速度/一致性
- 安全問題,因為 npm 安裝時允許運行代碼
Yarn 同樣是一個從 npm 注冊源獲取模塊的新的 CLI 客戶端。注冊的方式不會有任何變化 —— 你同樣可以正常獲取與發布包。
優點
一、速度快
主要還是yarn
運行速度得到了顯著的提升,整個安裝時間也變得更少。
速度快主要來自以下兩個方面:
- 1、並行安裝:無論 npm 還是Yarn在執行包的安裝時,都會執行一系列任務。npm是按照隊列執行每個package,也就是說必須要等到當前package安裝完成之后,才能繼續后面的安裝。而 Yarn 是並行執行所有任務,提高了性能。
- 2、離線模式:如果之前已經安裝過一個軟件包,用Yarn再次安裝時之間從緩存中獲取,就不用像npm那樣再從網絡下載了。
二、一致性
為了防止拉取到不同的版本,Yarn 有一個鎖定文件 lock file
記錄了被確切安裝上的模塊的版本號。
每次只要新增了一個模塊,Yarn 就會創建(或更新)yarn.lock
這個文件。
這么做就保證了,每一次拉取同一個項目依賴時,使用的都是一樣的模塊版本。
一、安裝
1. 進入官方下載頁面安裝
2. 最簡單的方法是運行:
npm install -g yarn
現在的yarn安裝頁面是這么說的:
注意:通常情況下不建議通過npm進行安裝。npm安裝是非確定性的,程序包沒有簽名,並且npm除了做了基本的SHA1哈希之外不執行任何完整性檢查,這給安裝系統程序帶來了安全風險。
基於這些原因,強烈建議你通過最適合於你的操作系統的安裝方法來安裝yarn。
以這種速度發展下去的話,如果yarn要宣布他們自己的registry,讓開發者慢慢淘汰npm的話,我們一點都不會感到驚訝。
安裝成功后即可查看版本:
yarn --version
二、初始化
進入項目目錄下並執行 yarn init
yarn init
會在根目錄下生成一個package.json,與npm類似具體不做解釋,如下
三、添加依賴
1. 添加包:yarn add [pkg-name] ,會自動安裝最新版本,會覆蓋指定版本號
舉例添加 jquery :
yarn add jquery
node_modules下會生成 jquery 文件夾,里面便是 yarn 生成的依賴
2. 一次性添加多個包:yarn add [pkg-name1] [pkg-name2]
舉例添加 bootstrap 和 zepto:
yarn add bootstrap zepto
成功后如下
3. 添加指定版本的包:yarn add [pkg-name]@ver
舉例添加 2.1.4版本的jquery:
yarn add jquery@2.1.4
成功后如下
4. 將包更新到指定版本:yarn upgrade [pkg-name]@ver
舉例將 jquery從2.1.4更新到3.0.0版本:
yarn upgrade jquery@3.0.0
成功后如下
5. 將包更新到最新版本:yarn upgrade --latest [pkg-name]
舉例將3.0.0版本的 jquery更新到最新版本:
yarn upgrade --latest jquery
成功后如下
6. 刪除包:yarn remove [pkg-name]
舉例刪除 jquery:
yarn remove jquery
成功后如下
7. 一次刪除多個包:yarn remove [pkg-name1] [pkg-name2]
舉例刪除 bootstrap 和 zepto:
yarn remove bootstrap zepto
四、yarn.lock 自動鎖定安裝包版本
Npm 有一個名為 shrinkwrap 的特性,其目的是在生產環境中使用時鎖定包依賴。shrinkwrap 的挑戰是每個開發者都必須手動運行 npm shrinkwrap 生成 npm-shrinkwrap.json 文件。
使用 Yarn,則截然不同。在安裝過程中,會自動生成一個 yarn.lock 文件,yarn.lock 會記錄你安裝的所有大大小小的。有點類似 PHP 開發者們所熟悉的 composer.lock。yarn.lock 鎖定了安裝包的精確版本以及所有依賴項,只要你不刪除 yarn.lock 文件,再次運行 yarn install 時,會根據其中記錄的版本號獲取所有依賴包。有了這個文件,你可以確定項目團隊的每個成員都安裝了精確的軟件包版本,部署可以輕松地重現,且沒有意外的 bug。你可以把 yarn.lock 提交到本庫里,這樣其他簽出代碼並運行 yarn install 時,可以保證大家安裝的依賴都是完全一致的。
例如上面安裝的bootstrap、jquery和zepto會在yarn.lock中有記錄,如下圖:
這里新建一個 yarn_demo2
的文件夾,並將 package.json
和 yarn.lock
文件從 yarn_demo
文件夾中復制過來,如下圖:
進入yarn_demo2
文件夾 執行 yarn
命令,即可一鍵下載 yarn.lock
中記錄的依賴包,相當方便快捷,值得你擁有~
五、yarn和npm命令對比
其他
至於bower與npm,其用法也是大同小異,但大佬給出的建議是:
end ~