常用命令
通過(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
使用教程
三步走
- 項(xiàng)目下初始化 - 切到你的項(xiàng)目下,執(zhí)行
yarn init
,會(huì)在根目錄下生成一個(gè)package.json
- 添加依賴安裝
- 開(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.json
和yarn.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 需要你重新操作。
并行安裝
每當(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 ls
和 yarn remove
,除yarn add
外,這些命令都和 npm 等效。
yarn install
npm install
命令會(huì)根據(jù) package.json
安裝依賴以及允許你添加新的模塊;yarn install
僅會(huì)按 yarn.lock
或 package.json
里面的依賴順序來(lái)安裝模塊。
yarn add [–dev]
與 npm install
類似,yarn add
允許你添加與安裝模塊,就像命令的名稱一樣,添加依賴意味著也會(huì)算定將依賴寫(xiě)入 package.json
,類似 npm 的 --save
參數(shù);Yarn 的 --dev
參數(shù)則是添加開(kāi)發(fā)依賴,類似 npm 的 --save-dev
參數(shù)。
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í)候該命令將變得非常好用。
yarn why
該命令會(huì)查找依賴關(guān)系并找出為什么會(huì)將某些包安裝在你的項(xiàng)目中。也許你明確為什么添加,也許它只是你安裝包中的一個(gè)依賴,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
混淆,它指的是更新到自己的最新版。
yarn generate-lock-entry
yarn generate-lock-entry
會(huì)基于 package.json
設(shè)置的依賴生成 yarn.lock
文件,該命令與 npm shrinkwrap
類似,但應(yīng)該小心使用,因?yàn)橥ㄟ^(guò) yarn add
和 yarn upgrade
命令添加或更新依賴時(shí)會(huì)自動(dòng)更新生成該鎖文件。
下面介紹一些常用的命令:
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
。
注意 : 之前說(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。