學(xué)習(xí)yarn

常用命令

通過(guò) npm 安裝

npm install --global yarn

執(zhí)行 set PATH=%PATH%;C:\.yarn\bin 來(lái)重新設(shè)置環(huán)境。

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

yarn init

添加一個(gè)依賴包

yarn add [package]
yarn add [package]@[version]
yarn add [package]@[tag]

更新一個(gè)依賴包

yarn upgrade [package]
yarn upgrade [package]@[version]
yarn upgrade [package]@[tag]

刪除一個(gè)依賴包

yarn remove [package]

安裝所有的依賴包

yarn

or

yarn install

使用教程

三步走

  1. 項(xiàng)目下初始化 - 切到你的項(xiàng)目下,執(zhí)行yarn init,會(huì)在根目錄下生成一個(gè)package.json
  2. 添加依賴安裝
  3. 開(kāi)工

命令解釋

  • yarn init

添加依賴

  • yarn add [package] — 添加包,會(huì)自動(dòng)安裝最新版本,注意會(huì)覆蓋指定版本號(hào)!!!
  • yarn add [package]@[version] — 帶版本號(hào)安裝
  • yarn add [package]@[tag] — tag,是指代git上的推送的tag【no release!!】

更新依賴

  • yarn upgrade [package] — 更新某個(gè)包
  • yarn upgrade [package]@[version] — 指定更新到某個(gè)版本
  • yarn upgrade [package]@[tag] — 指定更新版本到某個(gè)標(biāo)簽
    以上不能使用, 唯一能用的是在項(xiàng)目下執(zhí)行,yarn upgarde, 會(huì)遍歷所有依賴,然后全部更新

移除依賴

  • yarn remove [package] — 移除某個(gè)包

在其他項(xiàng)目啟動(dòng)項(xiàng)目

類似npm,執(zhí)行npm install;
yarn管理器支持兩種安裝所有依賴的命令:yarn 或者 yarn install
yarn管理器有一個(gè)很重要的文件需要注意,就是yarn.lock,這個(gè)是用來(lái)依賴的正確性,快速可靠安裝的;是執(zhí)行cli的時(shí)候自動(dòng)生成的,在項(xiàng)目的根目錄下,需要保留!!!!不要編輯它,這是自動(dòng)生成的 在其他電腦初始化,必須記得把package.jsonyarn.lock復(fù)制過(guò)去,簡(jiǎn)直就是秒下載【緩存機(jī)制】

yarn.lock 文件

npm 和 Yarn 都使用 package.json 來(lái)跟蹤項(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 命令來(lái)生成一個(gè)鎖文件,這樣在使用 npm install 時(shí)會(huì)在讀取 package.json 前先讀取這個(gè)文件,就像 Yarn 會(huì)先讀取yarn.lock 一樣。這里的區(qū)別是 Yarn 總會(huì)自動(dòng)更新 yarn.lock,而 npm 需要你重新操作。

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

并行安裝

每當(dāng) npm 或 Yarn 需要安裝一個(gè)包時(shí),它會(huì)進(jìn)行一系列的任務(wù)。在 npm 中這些任務(wù)是按包的順序一個(gè)個(gè)執(zhí)行,這意味著必須等待上一個(gè)包被完整安裝才會(huì)進(jìn)入下一個(gè);Yarn 則并行的執(zhí)行這些任務(wù),提高了性能。

為了比較,我在沒(méi)有使用 shrinkwrap/yarn.lock 的方式以及清理了緩存下使用 npm 與 Yarn 安裝 express,總共安裝了 42 個(gè)依賴。

  • npm: 9 s
  • Yarn: 1.37 s

我無(wú)法相信自己的眼睛,所以重復(fù)以上步驟,但得到相同結(jié)果。接著我安裝 gulp 進(jìn)行測(cè)試,總共安裝了 195 個(gè)依賴。

  • npm: 11 s
  • Yarn: 7.81 s

似乎根據(jù)所需要安裝的包的數(shù)量而有所不同,但 Yarn 依舊比較快。

清晰的輸出

npm 默認(rèn)情況下非常冗余,例如使用 npm install 時(shí)它會(huì)遞歸列出所有安裝的信息;而 Yarn 則一點(diǎn)也不冗余,當(dāng)可以使用其它命令時(shí),它適當(dāng)?shù)氖褂?emojis 表情來(lái)減少信息(Windows 除外)。

Yarn vs npm: CLI 的差異

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

yarn global

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

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

yarn install

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

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

yarn add [–dev]

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

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

yarn licenses [ls|generate-disclaimer]

npm 沒(méi)有類似命令來(lái)方便編寫(xiě)自己的包。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 定義的確切版本來(lái)將包更新到最新版本。如果想用 npm 來(lái)實(shí)現(xiàn)相同目的,可以這樣執(zhí)行:

rm -rf node_modules
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)橥ㄟ^(guò) yarn addyarn upgrade 命令添加或更新依賴時(shí)會(huì)自動(dòng)更新生成該鎖文件。

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

下面介紹一些常用的命令:

  • yarnyarn install ,這兩個(gè)命令的效果是一樣的,等同于npm install,使用這個(gè)命令會(huì)在該目錄生成一個(gè)yarn.lock的文件。

  • yarn add koa,安裝koa模塊并更新package.json和yarn.lock文件,等同于npm install koa --save。也可以使用yarn global add koa,等同于npm install koa -g,將模塊直接安裝到全局環(huán)境變量里,方便使用。

  • yarn list,根據(jù)當(dāng)前項(xiàng)目的package.json查看模塊的依賴及版本。

  • yarn info koa,查看koa模塊的詳細(xì)信息,類似于npm view koa

  • yarn init,初始化項(xiàng)目package.json文件,等同于npm init

  • yarn run,運(yùn)行package.json中的script

注意 : 之前說(shuō)了npm存在一些歷史遺留問(wèn)題 比如說(shuō)你的項(xiàng)目模塊依賴是圖中描述的,@1.2.1代表這個(gè)模塊的版本。在你安裝A的時(shí)候需要安裝依賴C和D,很多依賴不會(huì)指定版本號(hào),默認(rèn)會(huì)安裝最新的版本,這樣就會(huì)出現(xiàn)問(wèn)題:比如今天安裝模塊的時(shí)候C和D是某一個(gè)版本,而當(dāng)以后C、D更新的時(shí)候,再次安裝模塊就會(huì)安裝C和D的最新版本,如果新的版本無(wú)法兼容你的項(xiàng)目,你的程序可能就會(huì)出BUG,甚至無(wú)法運(yùn)行。這就是npm的弊端,而yarn為了解決這個(gè)問(wèn)題推出了yarn.lock的機(jī)制,這是作者項(xiàng)目中的yarn.lock文件。大家會(huì)看到,這個(gè)文件已經(jīng)把依賴模塊的版本號(hào)全部鎖定,當(dāng)你執(zhí)行yarn install的時(shí)候,yarn會(huì)讀取這個(gè)文件獲得依賴的版本號(hào),然后依照這個(gè)版本號(hào)去安裝對(duì)應(yīng)的依賴模塊,這樣依賴就會(huì)被鎖定,以后再也不用擔(dān)心版本號(hào)的問(wèn)題了。其他人或者其他環(huán)境下使用的時(shí)候,把這個(gè)yarn.lock拷貝到相應(yīng)的環(huán)境項(xiàng)目下再安裝即可,注意:這個(gè)文件不要手動(dòng)修改它,當(dāng)你使用一些操作如yarn add時(shí),yarn會(huì)自動(dòng)更新yarn.lock。

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

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