yarn包管理工具的使用

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

與npm的區(qū)別

Yarn 是 Facebook, Google, Exponent 和 Tilde 開發(fā)的一款新的 JavaScript 包管理工具。它的目的是解決這些團(tuán)隊(duì)使用 npm 面臨的少數(shù)問題,即:

  • 安裝的時(shí)候無(wú)法保證速度/一致性
  • 安全問題,因?yàn)?npm 安裝時(shí)允許運(yùn)行代碼

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

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

yarn global

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

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

  1. yarn global 文檔

yarn install

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

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

yarn add [–dev]

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

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

yarn licenses [ls|generate-disclaimer]

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

  1. yarn licenses 文檔

yarn why

該命令會(huì)查找依賴關(guān)系并找出為什么會(huì)將某些包安裝在你的項(xiàng)目中。也許你明確為什么添加,也許它只是你安裝包中的一個(gè)依賴,yarn why 可以幫你弄找出。

  1. yarn why 文檔

yarn upgrade

該命令會(huì)根據(jù)符合 package.json 設(shè)定的規(guī)則而不是 yarn.lock 定義的確切版本來將包更新到最新版本。如果想用 npm 來實(shí)現(xiàn)相同目的,可以這樣執(zhí)行:

Shell

1 rm -rf node_modules
2 npm install

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

  1. yarn upgrade 文檔

yarn generate-lock-entry

yarn generate-lock-entry 會(huì)基于 package.json 設(shè)置的依賴生成 yarn.lock 文件,該命令與 npm shrinkwrap 類似,但應(yīng)該小心使用,因?yàn)橥ㄟ^ yarn addyarn upgrade 命令添加或更新依賴時(shí)會(huì)自動(dòng)更新生成該鎖文件。

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

在這介紹兩種安裝方式:

安裝

1. npm工具安裝

 npm install yarn -g

2. 官網(wǎng)安裝

點(diǎn)擊打開

使用

初始化一個(gè)新項(xiàng)目

相當(dāng)于npm的 npm init

yarn init
添加依賴包

相當(dāng)于npm的 npm install [packageName] --save

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

分別添加到 devDependenciespeerDependenciesoptionalDependencies 類別中:

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

相當(dāng)于npm的 npm update

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

相當(dāng)于npm的 npm uninstall [package]

yarn remove [package]
安裝項(xiàng)目的全部依賴

相當(dāng)于npm的 npm i 或者 npm install

yarn

或者

yarn install
依賴和版本

在yarn中與npm中類似都有兩個(gè)依賴和版本文件
依賴項(xiàng)的類型 package.json
依賴項(xiàng)的指定版本 yarn.lock

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

{
  "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項(xiàng)目根目錄中的文件。這些“鎖定文件”看起來像這樣:

# 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   //添加要在當(dāng)前包中使用的包。
2. yarn init
yarn init   //初始化包的開發(fā)。
3. yarn install
yarn install   //安裝package.json文件中定義的所有依賴項(xiàng)。
4. yarn publish
yarn publish   //將包發(fā)布到包管理器。
5. yarn remove
yarn remove  //從當(dāng)前包中刪除未使用的包。

自定義命令

運(yùn)行已定義的包腳本

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

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

yarn run [script] [<args>]

如果已在scripts包中定義了一個(gè)對(duì)象,則此命令將運(yùn)行指定的對(duì)象[script]。例如:

yarn run test

運(yùn)行此命令將執(zhí)行package.json中您指定的腳本命令"test"

您可以通過在腳本名稱后面?zhèn)鬟f其他參數(shù)來將其傳遞給腳本。

yarn run test -o --watch

運(yùn)行此命令將執(zhí)行jest -o --watch

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

也可以省略run這個(gè)命令,每個(gè)腳本都可以用它的名字執(zhí)行:

yarn test -o --watch

運(yùn)行此命令將執(zhí)行相同的操作yarn run test -o --watch。請(qǐng)注意,內(nèi)置cli命令將優(yōu)先于您的腳本,因此您不應(yīng)始終在其他腳本中依賴此快捷方式

yarn run env

運(yùn)行此命令將列出運(yùn)行時(shí)腳本可用的環(huán)境變量。

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

yarn run

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,732評(píng)論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,214評(píng)論 3 426
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,781評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,588評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,315評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,699評(píng)論 1 327
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,698評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,882評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,441評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,189評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,388評(píng)論 1 372
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,933評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,613評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,023評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,310評(píng)論 1 293
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,112評(píng)論 3 398
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,334評(píng)論 2 377

推薦閱讀更多精彩內(nèi)容

  • 版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 PS:轉(zhuǎn)載請(qǐng)注明出處作者:TigerChain地址:http...
    TigerChain閱讀 21,371評(píng)論 3 13
  • yarn 的優(yōu)勢(shì) yarn 是 facebook 在 2016年10月11日發(fā)布到 JavaScript 包管理工...
    Tim_Lee閱讀 1,908評(píng)論 0 0
  • 常用命令 通過 npm 安裝 執(zhí)行 set PATH=%PATH%;C:\.yarn\bin 來重新設(shè)置環(huán)境。 初...
    majun00閱讀 1,739評(píng)論 0 3
  • I think that there really is no shortcut to success, but ...
    張OO閱讀 511評(píng)論 0 0
  • 今天是什么日子 起床:6:00 就寢:23:00 天氣:陰 心情:不錯(cuò) 紀(jì)念日:無(wú) 任務(wù)清單 昨日完成的任務(wù),最重...
    雪山牧場(chǎng)閱讀 111評(píng)論 0 2