yarn包管理工具的使用

Yarn 對(duì)你的代碼來說是一個(gè)包管理器, 你可以通過它使用全世界開發(fā)者的代碼, 或者分享自己的代碼。Yarn 做這些快捷、安全、可靠,所以你不用擔(dān)心什么。
通過Yarn你可以使用其他開發(fā)者針對(duì)不同問題的解決方案,使自己的開發(fā)過程更簡單。 使用過程中遇到問題,你可以將其上報(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í)候無法保證速度/一致性
  • 安全問題,因?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)下使用語義化版本發(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:   可有可無,表示在安裝失敗的時(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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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

友情鏈接更多精彩內(nèi)容