基于pnpm的monorepo

什么是monorepo

monorepo其實(shí)就是一個(gè)大包下面包含了許多子包,典型案例有:babel、vue3等知名項(xiàng)目。相對(duì)于傳統(tǒng)的mutirepo項(xiàng)目,monorepo的優(yōu)勢(shì)在于:

  • 統(tǒng)一管理
    可以在外部添加公用包
  • 多包間通信更簡(jiǎn)單
    這一點(diǎn)在多包間有相互引用的場(chǎng)景下尤為重要

基于pnpm的monorepo模式

pnpm和npm、yarn都是包管理工具,不同的是 pnpm 使用了軟鏈的模式,使包的體積更小,下載速度更快,并且 pnpm 支持 monorepo 方案。這樣我們就不用再去找別的技術(shù)方案了,節(jié)省了調(diào)研的時(shí)間。

目錄結(jié)構(gòu)

monorepo的結(jié)構(gòu)如下

├── packages
|   ├── package1   // 包1
|   |   ├── package.json
|   ├── package2   // 包2
|   |   ├── package.json
├── package.json
├── pnpm-workspace.yaml 配置文件

pnpm-workspace.yaml 配置文件

packages:
  # 所有在 packages/  子目錄下的 package
  - 'packages/**'

注意

包最好只使用 pnpm 進(jìn)行管理,如果和 npm、yarn 進(jìn)行混用,可以會(huì)出現(xiàn)一些兼容性問(wèn)題。下面我們將 npm、yarn 進(jìn)行禁用,方法是添加 preinstall npm hook 鉤子,這個(gè)鉤子會(huì)在安裝模塊前觸發(fā),檢查該代碼是否是使用 pnpm 運(yùn)行,如果不是的話會(huì)推出并提示錯(cuò)誤。

"scripts": {
    "preinstall": "npx only-allow pnpm"
}

常用語(yǔ)法

  • 如果一個(gè)包是子包都需要的,那么我們可以把這個(gè)包安裝到主包
# -w 全局安裝
pnpm i 包名 -S/-D -w 
  • 如果只想在某一個(gè)子包進(jìn)行安裝
# --filter 是用來(lái)指定子包
pnpm i 包名 -S/-D --filter 子包的名稱(chēng)

# 或者直接切換到子包的目錄進(jìn)行安裝
pnpm i 包名 -S/-D
  • 當(dāng)一個(gè)子包需要引用另一個(gè)子包
# 通過(guò)這個(gè)命令,可以在子包2中引用子包1
pnpm i 子包1 --filter 子包2
?著作權(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),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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