第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

首頁 慕課教程 Yarn 入門教程 Yarn 入門教程 Yarn的workspace和離線安裝策略

Yarn 的 workspace 和離線安裝策略

前言:大家好,很高興和大家又見面啦!在之前得幾個(gè)小節(jié)里,主要給大家介紹了關(guān)于 Yarn 得基礎(chǔ)知識,大家只要在平時(shí)得開發(fā)過程中,多多得嘗試使用,一定能很快得掌握。那本章開始,我將給大家講解一些關(guān)于 Yarn 得高級特性,有助于幫助大家理解,為什么 Yarn 這個(gè)依賴管理工具,在短時(shí)間就能廣泛的在前端架構(gòu)中被大家熱衷使用,并且發(fā)展成為足以媲美 npm 的主流管理工具。

1. 關(guān)于 Yarn 的 workspace

1.1 為什么要使用 workspace

在前面的章節(jié)中,給大家簡單提過這樣一個(gè)觀點(diǎn),就是 yarn 的官方文檔教程中表示,Yarn 并不希望開發(fā)者像使用 npm 那樣,在不考慮內(nèi)存等相關(guān)因素的情況下,可以隨心所欲的全局安裝依賴然后去使用它。它更希望我們針對于每一個(gè)項(xiàng)目,單獨(dú)去維護(hù)我們的項(xiàng)目相關(guān)依賴。

基于這種使用思路,那么我們現(xiàn)在思考一個(gè)問題:單獨(dú)維護(hù)每個(gè)項(xiàng)目,這樣可以根據(jù)項(xiàng)目的 package.json 去維護(hù)每個(gè)項(xiàng)目的依賴,非常的清晰、方便。但是同時(shí)也暴露出了一些如重復(fù)安裝,占用存儲空間等缺點(diǎn)。所以,為了解決這些不足,Yarn 的 workspace 策略應(yīng)運(yùn)而生。

1.2 workspace 能幫我們解決什么問題?

  • 依賴關(guān)系可以鏈接在一起,這意味著你的工作區(qū)可以相互依賴,同時(shí)始終使用最新的可用代碼。這也是一個(gè)相對于 yarn link 更好的機(jī)制,因?yàn)樗挥绊懩愕墓ぷ骺臻g樹,而不是整個(gè)系統(tǒng)
  • 能幫助你更好地管理多個(gè)子項(xiàng)目的依賴庫,這樣你可以在每個(gè)子項(xiàng)目里使用獨(dú)立的 package.json 管理你的依賴,又不用分別進(jìn)到每一個(gè)子項(xiàng)目里去 yarn install/upfrade 安裝/升級依賴,而是使用一條yarn命令去處理所有依賴。就像只有一個(gè)package.json一樣。
  • yarn會根據(jù)就依賴關(guān)系幫助你分析所有子項(xiàng)目的共用依賴,保證所有的項(xiàng)目公用的依賴只會被下載和安裝一次。

這樣就能完美的解決了我們上文所分析的問題。那么接下來,我就帶領(lǐng)大家通過實(shí)際例子的方式,具體的使用一下 Yarnworkspace 吧!

1.3 如何使用 workspace

當(dāng)我們需要構(gòu)建一個(gè)大型的前端項(xiàng)目,里面包含幾個(gè)并列的子項(xiàng)目時(shí),我們就可以使用yarn得 workspace 。目前國內(nèi)得許多經(jīng)典開源項(xiàng)目,如 vue、react 等,都是用得這一思路去構(gòu)建他們得項(xiàng)目。

1.3.1 沒有使用workspace時(shí),我們怎么做的

在不使用 workspace 時(shí),我們的項(xiàng)目目錄通常是這樣的

projects/
| project1/
|  |--package.json
|  |--node_modules/
|  |  |--vue/
|--project2
|  |--package.json
|  |--node_modules/
|  |  |--vue/
|  |  |--project1/

其中第一個(gè)子項(xiàng)目 project1 的 package.json 配置可以簡化為:

{
  "name": "project1",
  "version": "1.0.0",
  "dependencies": {
    "vue": "1.0.0"
  }
}

第二個(gè)子項(xiàng)目 project2 的 package.json 配置可以簡化為:

{
  "name": "project2",
  "version": "1.0.0",
  "dependencies": {
    "vue": "1.0.0",
    "project1": "1.0.0"
  }
}

這種經(jīng)典的傳統(tǒng)使用方法,就會暴露出如上文所說的問題,總結(jié)本案例的不足點(diǎn)如下:

  1. 兩個(gè)子項(xiàng)目有相同的依賴 vue ,每個(gè)子項(xiàng)目都會下載一次 vue 依賴,不僅浪費(fèi)開發(fā)效率,還占用額外空間,當(dāng)子項(xiàng)目較多時(shí),問題更加明顯。
  2. 第二個(gè)子項(xiàng)目 project2 依賴于第一個(gè)子項(xiàng)目 project2 ,而 project1 如果沒有發(fā)布到 npm 倉庫,那就得使用yarn link命令來配置依賴,非常不方便。
  3. 需要使用 yarn build 構(gòu)建項(xiàng)目時(shí),需要每個(gè)子項(xiàng)目分別構(gòu)建,不能統(tǒng)一構(gòu)建。

1.3.2 使用workspace示例

使用 workspace 不用安裝別的依賴,直接新建一個(gè)項(xiàng)目根目錄 projects, 初始化項(xiàng)目即可。然后修改初始化的 package.json 文件為:

{
  "private": true,
  "workspaces": ["project1", "project2"] // 也可以使用通配符設(shè)置為 ["project*"],開源社區(qū)則都基本上使用 "workspaces": ["packages/*"] 的目錄結(jié)構(gòu)。
}

兩個(gè)子項(xiàng)目 project1 和 project2 如上文配置不變。

在根目錄 projects 目錄下執(zhí)行 yarn install

$ yarn install
yarn install v1.22.0
info No lockfile found.
[1/4] ?  Resolving packages...
[2/4] ?  Fetching packages...
[3/4] ?  Linking dependencies...
[4/4] ?  Building fresh packages...
success Saved lockfile.
?  Done in 0.56s.

此時(shí)查看目錄結(jié)構(gòu)如下:

projects/
|--package.json
|--project1/
|  |--package.json
|--project2
|  |--package.json
|--node_modules/
|  |--vue/
|  |--project1/ -> ./project1/

備注

  • 如果需要某個(gè)特殊的 子項(xiàng)目 不受 Yarn Workspace 管理,只需在此 workspace 目錄下添加 .yarnrc 文件,并添加如下內(nèi)容禁用即可
workspaces-experimental false
  • 如果想單獨(dú)添加或者移除某個(gè)子項(xiàng)目的依賴,可以使用如下命令:
$ yarn workspace project1 add vue --dev
$ yarn workspace project1 remove vue 

以上便是 yarn 的 workspace 簡單用法。

2. 淺談Yarn的離線安裝策略

我們知道,yarn 這個(gè)依賴管理工具和其他的管理工具對比,一大特點(diǎn)就是快。根據(jù)以往經(jīng)驗(yàn)來看,當(dāng)我們使用 npm ,因?yàn)榫W(wǎng)速或者其他的,如需科學(xué)上網(wǎng)才能下載依賴等問題時(shí),使用 yarn 代替 npm 去下載時(shí),往往會有很好的效果。

那么,如果是更加極端的情況,比如我們當(dāng)前沒有網(wǎng)絡(luò)的情況,想下載相關(guān)依賴,可以嗎?答案是可以,只要我們之前在有網(wǎng)絡(luò)時(shí)候在本地下載過這個(gè)依賴,那就可以按照如下方法去離線下載相關(guān)依賴。

  1. 設(shè)置離線存儲目錄,使用下面命令會在當(dāng)前項(xiàng)目路徑生成一個(gè) yarn-offline 文件夾用來存放構(gòu)建的.tgz離線文件。
yarn config set yarn-offline-mirror ./yarn-offline
  1. 離線文件夾不會同步你的包,可能會導(dǎo)致一些的問題,所以需要清除用不到的壓縮包。
yarn config set yarn-offline-mirror-pruning true
  1. 刪除 node_modules 文件夾下面的 yarn.lock,生成離線文件。
yarn install
  1. 模擬沒有網(wǎng)絡(luò)的環(huán)境,刪除上面安裝的 node_modules 文件,并執(zhí)行下面命令。
yarn --offline

以上便是使用 yarn 進(jìn)行離線安裝依賴的方法。

3. 小結(jié)

Yarn 作為后起之秀,發(fā)展成現(xiàn)在深受廣大開發(fā)者喜愛的依賴管理工具,有很多 npm 等管理工具所不具備的特性和優(yōu)勢,本文就給大家講解了 yarn 的兩個(gè)高級用法:workspace 和離線緩存策略。希望大家在熟練掌握它的基礎(chǔ)用法的同時(shí),也能深入理解 yarn 的高級用法與特性。