yarn包管理工具的使用

Yarn 對你的代碼來說是一個包管理器, 你可以通過它使用全世界開發者的代碼, 或者分享自己的代碼。Yarn 做這些快捷、安全、可靠,所以你不用擔心什么。
通過Yarn你可以使用其他開發者針對不同問題的解決方案,使自己的開發過程更簡單。 使用過程中遇到問題,你可以將其上報或者貢獻解決方案。一旦問題被修復, Yarn會更新保持同步。
代碼通過 包(package) (或者稱為 模塊(module)) 的方式來共享。 一個包里包含所有需要共享的代碼,以及描述包信息的文件,稱為 package.json

與npm的區別

Yarn 是 Facebook, Google, Exponent 和 Tilde 開發的一款新的 JavaScript 包管理工具。它的目的是解決這些團隊使用 npm 面臨的少數問題,即:

  • 安裝的時候無法保證速度/一致性
  • 安全問題,因為 npm 安裝時允許運行代碼

npm 和 Yarn 都使用 package.json 來跟蹤項目的依賴,版本號并非一直準確,因為你可以定義版本號范圍,這樣你可以選擇一個主版本和次要版本的包,但讓 npm 安裝最新的補丁也許可以修改一些 bug。
理想狀態下使用語義化版本發布補丁不會包含大的變化,但不幸的是這必非真理。npm 的這種策略可能導致兩臺擁有相同 package.json 文件的機子安裝了不同版本的包,這可能導致一些錯誤。
為了避免包版本的錯誤匹配,一個確定的安裝版本被固定在一個鎖文件中。每次模塊被添加時,Yarn 就會創建(或更新)yarn.lock 文件,這樣你就可以保證其它機子也安裝相同版本的包,同時包含了 package.json 中定義的一系列允許的版本。
在 npm 中同樣可以使用 npm shrinkwrap 命令來生成一個鎖文件,這樣在使用 npm install 時會在讀取 package.json 前先讀取這個文件,就像 Yarn 會先讀取yarn.lock 一樣。這里的區別是 Yarn 總會自動更新 yarn.lock,而 npm 需要你重新操作。

除了一些功能差異,Yarn 命令也存在一些區別。例如移除或修改了一些 npm 命令以及添加了幾個有趣的命令。

yarn global

不像 npm 添加 -g--global 可以進行全局安裝,Yarn 使用的是 global 前綴。不過與 npm 類似,項目依賴不推薦全局安裝。

global 前綴只能用于 yarn add, yarn bin, yarn lsyarn remove,除yarn add外,這些命令都和 npm 等效。

  1. yarn global 文檔

yarn install

npm install 命令會根據 package.json 安裝依賴以及允許你添加新的模塊;yarn install 僅會按 yarn.lockpackage.json 里面的依賴順序來安裝模塊。

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

yarn add [–dev]

npm install 類似,yarn add 允許你添加與安裝模塊,就像命令的名稱一樣,添加依賴意味著也會算定將依賴寫入 package.json,類似 npm 的 --save 參數;Yarn 的 --dev參數則是添加開發依賴,類似 npm 的 --save-dev 參數。

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

yarn licenses [ls|generate-disclaimer]

npm 沒有類似命令來方便編寫自己的包。yarn licenses ls 列出所有已安裝包的許可協議。yarn licenses generate-disclaimer 生成包含已安裝包許可協議的免責聲明。某些協議要求使用者必須在項目中包含該協議,這時候該命令將變得非常好用。

  1. yarn licenses 文檔

yarn why

該命令會查找依賴關系并找出為什么會將某些包安裝在你的項目中。也許你明確為什么添加,也許它只是你安裝包中的一個依賴,yarn why 可以幫你弄找出。

  1. yarn why 文檔

yarn upgrade

該命令會根據符合 package.json 設定的規則而不是 yarn.lock 定義的確切版本來將包更新到最新版本。如果想用 npm 來實現相同目的,可以這樣執行:

Shell

1 rm -rf node_modules
2 npm install

不要將該命令與 npm update 混淆,它指的是更新到自己的最新版。

  1. yarn upgrade 文檔

yarn generate-lock-entry

yarn generate-lock-entry 會基于 package.json 設置的依賴生成 yarn.lock 文件,該命令與 npm shrinkwrap 類似,但應該小心使用,因為通過 yarn addyarn upgrade 命令添加或更新依賴時會自動更新生成該鎖文件。

  1. yarn generate-lock-entry 文檔
  2. npm shrinkwrap 文檔

在這介紹兩種安裝方式:

安裝

1. npm工具安裝

 npm install yarn -g

2. 官網安裝

點擊打開

使用

初始化一個新項目

相當于npm的 npm init

yarn init
添加依賴包

相當于npm的 npm install [packageName] --save

yarn add [package]                          
yarn add [package]@[version]          
yarn add [package]@[tag]
將依賴項添加到不同依賴項類別中

分別添加到 devDependenciespeerDependenciesoptionalDependencies 類別中:

yarn add [package] --dev           相當于 npm install [package] --save-dev
yarn add [package] --peer
yarn add [package] --optional
dependencies:   正常的運行過程中的依賴 瀏覽器跑的時候
devDependencies:   開發模式 所用的依賴
peerDependencies:   當你發布項目的時候 可以指定該依賴
optionalDependencies:   可有可無,表示在安裝失敗的時候一個備選的依賴保證過程
bundleDependencies:   發布項目的時候所用的依賴 不是從npm來的 一起打包發布到
升級依賴包

相當于npm的 npm update

yarn upgrade [package]
yarn upgrade [package]@[version]
yarn upgrade [package]@[tag]
移除依賴包

相當于npm的 npm uninstall [package]

yarn remove [package]
安裝項目的全部依賴

相當于npm的 npm i 或者 npm install

yarn

或者

yarn install
依賴和版本

在yarn中與npm中類似都有兩個依賴和版本文件
依賴項的類型 package.json
依賴項的指定版本 yarn.lock

yarn.cock文件使機器之間獲得一致的安裝。
package.json將包含所有這些依賴項:

{
  "name": "my-project",
  "dependencies": {
    "package-a": "^1.0.0"
  },
  "devDependencies": {
    "package-b": "^1.2.1"
  },
  "peerDependencies": {
    "package-c": "^2.5.4"
  },
  "optionalDependencies": {
    "package-d": "^3.1.0"
  }
}

Yarn使用yarn.lock項目根目錄中的文件。這些“鎖定文件”看起來像這樣:

# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
package-1@^1.0.0:
  version "1.0.3"
  resolved "https://registry.npmjs.org/package-1/-/package-1-1.0.3.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
package-2@^2.0.0:
  version "2.0.1"
  resolved "https://registry.npmjs.org/package-2/-/package-2-2.0.1.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
  dependencies:
    package-4 "^4.0.0"
package-3@^3.0.0:
  version "3.1.9"
  resolved "https://registry.npmjs.org/package-3/-/package-3-3.1.9.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"
  dependencies:
    package-4 "^4.5.0"
package-4@^4.0.0, package-4@^4.5.0:
  version "4.6.3"
  resolved "https://registry.npmjs.org/package-4/-/package-4-2.6.3.tgz#a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0"

yarn命令

常用命令

1. yarn add
yarn add   //添加要在當前包中使用的包。
2. yarn init
yarn init   //初始化包的開發。
3. yarn install
yarn install   //安裝package.json文件中定義的所有依賴項。
4. yarn publish
yarn publish   //將包發布到包管理器。
5. yarn remove
yarn remove  //從當前包中刪除未使用的包。

自定義命令

運行已定義的包腳本

您可以在 package.json文件中定義要運行的腳本命令

{
  "name": "my-package",
  "scripts": {
    "build": "babel src -d lib",
    "test": "jest"
  }
}

yarn run [script] [<args>]

如果已在scripts包中定義了一個對象,則此命令將運行指定的對象[script]。例如:

yarn run test

運行此命令將執行package.json中您指定的腳本命令"test"

您可以通過在腳本名稱后面傳遞其他參數來將其傳遞給腳本。

yarn run test -o --watch

運行此命令將執行jest -o --watch

[script]也可以是里面的任何本地安裝的可執行文件node_modules/.bin/

也可以省略run這個命令,每個腳本都可以用它的名字執行:

yarn test -o --watch

運行此命令將執行相同的操作yarn run test -o --watch。請注意,內置cli命令將優先于您的腳本,因此您不應始終在其他腳本中依賴此快捷方式

yarn run env

運行此命令將列出運行時腳本可用的環境變量。

如果要覆蓋此命令,可以通過在其中定義自己的"env"腳本來執行此操作package.json

yarn run

如果未指定yarn run命令的腳本,該run命令將列出可用于運行包的所有腳本。

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

推薦閱讀更多精彩內容