Yarn是Facebook公司出品的用于管理nodejs包的一款軟件,開發(fā)過(guò)nodejs的同學(xué)應(yīng)該知道,我們一般都使用npm作為我們nodejs項(xiàng)目的模塊管理器,但npm有一些歷史遺留問(wèn)題,首先,npm安裝速度比較慢,而且當(dāng)項(xiàng)目中模塊數(shù)量越來(lái)越多時(shí),管理這些模塊及其依賴的版本是件令人頭疼的事,其次npm在模塊安裝的過(guò)程中可以執(zhí)行程序,安全性不高。yarn的存在正好解決了這些問(wèn)題,模塊安裝速度簡(jiǎn)直快的令人發(fā)指,當(dāng)某些模塊通過(guò)yarn安裝過(guò)后,再次安裝甚至不需要連接網(wǎng)絡(luò);yarn也可以很好的控制模塊依賴的版本(通過(guò)yarn.lock文件鎖?。野踩煽?。個(gè)人認(rèn)為這么牛X的東西今后一定會(huì)取代npm的,而且會(huì)做的更好更完美。
0x01 安裝
Windows版本下載地址:很簡(jiǎn)單,下載安裝文件運(yùn)行即可。注意,一定要把殺毒軟件關(guān)掉,或者將該安裝程序添加到殺毒軟件的白名單中,否則可能無(wú)法安裝成功,作者之前就在這被坑了好長(zhǎng)時(shí)間。
Linux版本安裝說(shuō)明:同樣很簡(jiǎn)單,如果你使用的是Debian或者Ubuntu,直接使用命令apt-get install yarn即可,其他linux版本只要按照網(wǎng)址上面的文檔安裝即可。
0x02 使用Yarn
下面介紹一些常用的命令:
-
yarn和yarn 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。
yarn還有很多有用的命令,很簡(jiǎn)單,大家可以通過(guò)yarn help獲取幫助信息,或者查看yarn官網(wǎng)的文檔,上面說(shuō)的都很詳細(xì)。
0x03 yarn.lock文件
之前說(shuō)了npm存在一些歷史遺留問(wèn)題,請(qǐng)看下圖:

比如說(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。
簡(jiǎn)書作者 小菜荔枝 轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)