最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS前端架構pnpm構建Monorepo方式管理demo

 更新時間:2022年07月09日 11:28:52   作者:一碗周  
這篇文章主要為大家介紹了JS前端架構pnpm構建Monorepo方式的管理demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

?? 寫在前面

Monorepo這個詞你應該不止一次聽說了,像Vue3、Vite、ElementPlus等優(yōu)秀開源項目都是使用Monorepo的方式管理項目,且這里說到的這幾個項目都是采用pnpm作為包管理工具。

這篇文章就使用pnpm構建一個簡單的Monorepo方式管理的項目。

?? 什么是Monorepo?什么是pnpm?

Q:什么是Monorepo?

A:Monorepo是一種項目管理方式,就是把多個項目放在一個倉庫里面,可以參考神三元大佬的一篇文章:現(xiàn)代前端工程為什么越來越離不開 Monorepo?,這篇文章中介紹了Monorepo的概念、收益以及MulitRepo的弊端。

Q:什么是pnpm?

A:pnpm就是一個包管理工具,原生支持Monorepo,比npm和yarn更快一些,其他的可以參考官網和另一篇文章:為什么現(xiàn)在我更推薦 pnpm 而不是 npm/yarn?

?? 搞一個Monorepo的demo玩玩

現(xiàn)在我們就開始使用pnpm來構建一個Monorepo,在正事開始之前,你先需要保證你的電腦中具有Node.js,我的版本的是16.9.0。

首先你需要有pnpm這個工具,安裝的話可以從官網找方法,或者直接使用npm安裝,命令如下:

npm i pnpm -g

現(xiàn)在我們開始搞事情。

第一步,創(chuàng)建一個項目的根目錄,這里就叫monorepo-demo,咋創(chuàng)建都可,這里使用的是命令:

mkdir monorepo-demo

第二步,初始化package.json,這個沒啥說的,命令如下:

pnpm init

這里我對內容做了一點修改,package.json的內容如下:

{
  "name": "monorepo-demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "type": "module",
  "keywords": [],
  "author": "ywanzhou",
  "license": "MIT"
}

這里我主要添加了一個type字段,這里我使用ESModule模塊化規(guī)范。

第三步,創(chuàng)建pnpm-workspace.yaml文件,這個文件定義了工作空間的根目錄,內容如下:

packages:
  - 'packages/ **'

現(xiàn)在我們就可以在packages中創(chuàng)建多個項目了,目錄結構如下:

monorepo-demo
├── package.json
├── packages
│   ├── components
│   │   ├── index.js
│   │   └── package.json
│   ├── core
│   │   ├── index.js
│   │   └── package.json
│   ├── utils
│   │   ├── index.js
│   │   └── package.json
├── pnpm-lock.yaml
└── pnpm-workspace.yaml

第四步,編寫每個項目的package.json,其實主要是編寫一下名稱,方便以后使用,這里我的如下:

{
  "name": "@packages/components",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "type": "module",
  "license": "ISC",
  "dependencies": {
    "lodash": "^4.17.21",
    "@packages/utils": "workspace:^1.0.0"
  }
}

剩余的兩個名稱分別為@packages/core@packages/utils。

其實到這基本工作就準備好了,現(xiàn)在介紹一下如何安裝依賴,如何在packageA中引用packageB。

?? 安裝依賴

就這個demo來說,我們如果在根目錄下安裝依賴的話,這個依賴可以在所有的packages中使用,如果我們需要為具體的一個package安裝依賴怎么辦?

cd到package的所在目錄嘛?漏,大漏特漏,我們可以通過下面這個命令:

pnpm --filter <package_selector> <command>

例如我們需要在@packages/components安裝lodash,命令如下:

pnpm -F @packages/components add lodash

-F等價于--filter

現(xiàn)在我們在往@packages/utils中安裝一個dayjs,命令如下:

pnpm --filter @packages/utils add dayjs

?? packageA中引用packageB

現(xiàn)在我們就來實現(xiàn)package間的相互引用,首先我們在@packages/utils/index.js中寫入如下內容:

import dayjs from 'dayjs'
export function format(time, f = 'YYYY-MM-DD') {
  return dayjs(time).format(f)
}

然后我們執(zhí)行如下命令:

pnpm -F @packages/components add @packages/utils@*

這個命令表示在@packages/components安裝@packages/utils,其中的@*表示默認同步最新版本,省去每次都要同步最新版本的問題。

安裝完成后@packages/components/package.json內容如下:

{
  "name": "@packages/components",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "type": "module",
  "license": "ISC",
  "dependencies": {
    "@packages/utils": "workspace: *",
    "lodash": "^4.17.21"
  }
}

然后我們在@packages/components/index.js寫入如下內容:

import { format } from '@packages/utils'
console.log(format(new Date()))

然后我們在項目根目錄運行如下命令

node packages/components

即可打印出當前的日期。

?? 寫在最后

到這這篇文章就結束了,文中的內容比較簡答,可以說僅僅是Monorepo的入門,畢竟只有,入門之后才能繼續(xù)深入學習嘛,更多關于JS pnpm構建Monorepo管理的資料請關注腳本之家其它相關文章!

相關文章

  • JS前端白屏前世今生及解決方式

    JS前端白屏前世今生及解決方式

    這篇文章主要為大家介紹了JS前端白屏前世今生及解決方式案例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • 微信小程序 sha1 實現(xiàn)密碼加密實例詳解

    微信小程序 sha1 實現(xiàn)密碼加密實例詳解

    這篇文章主要介紹了微信小程序 sha1 實現(xiàn)密碼加密實例詳解的相關資料,需要的朋友可以參考下
    2017-07-07
  • 用javascript制作qq注冊動態(tài)頁面

    用javascript制作qq注冊動態(tài)頁面

    這篇文章主要介紹了用javascript制作qq注冊動態(tài)頁面,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-04-04
  • 微信支付 JS API支付接口詳解

    微信支付 JS API支付接口詳解

    本文是對微信支付 JS API支付接口介紹,并附代碼實例,在開發(fā)過程中具有參考價值,希望能幫助到需要的朋友
    2016-07-07
  • requestAnimationFrame定時動畫屏幕刷新率節(jié)流示例淺析

    requestAnimationFrame定時動畫屏幕刷新率節(jié)流示例淺析

    這篇文章主要為大家介紹了requestAnimationFrame定時動畫屏幕刷新率節(jié)流示例淺析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • JavaScript函數(shù)柯里化

    JavaScript函數(shù)柯里化

    這篇文章主要介紹了JavaScript函數(shù)柯里化,柯里化即Currying是把接受多個參數(shù)的函數(shù)變換成接受一個單一參數(shù)函數(shù),并且返回接受余下的參數(shù)且返回結果的新函數(shù)的技術,下面文章詳細內容,需要的朋友可以參考一下
    2021-11-11
  • canvas?中如何實現(xiàn)物體的框選

    canvas?中如何實現(xiàn)物體的框選

    這篇文章主要為大家介紹了canvas中如何實現(xiàn)物體的框選的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • ECharts框架分段視覺映射在移動端適配

    ECharts框架分段視覺映射在移動端適配

    這篇文章主要介紹了ECharts框架分段視覺映射在移動端適配詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 微信小程序 跳轉方式總結

    微信小程序 跳轉方式總結

    這篇文章主要介紹了微信小程序 跳轉方式總結的相關資料,需要的朋友可以參考下
    2017-04-04
  • 微信小程序 實戰(zhàn)程序簡易新聞的制作

    微信小程序 實戰(zhàn)程序簡易新聞的制作

    這篇文章主要介紹了微信小程序 實戰(zhàn)程序簡易新聞的制作的相關資料,需要的朋友可以參考下
    2017-01-01

最新評論

凤阳县| 梓潼县| 临城县| 依安县| 海盐县| 太康县| 宁安市| 灌阳县| 谢通门县| 嘉善县| 汉寿县| 安图县| 新巴尔虎左旗| 区。| 正阳县| 武穴市| 杨浦区| 宁城县| 玛沁县| 芦溪县| 蛟河市| 万源市| 徐州市| 玛沁县| 山西省| 北宁市| 石景山区| 阜南县| 含山县| 昌图县| 健康| 龙井市| 德安县| 北川| 托克逊县| 广汉市| 鲁山县| 桐乡市| 岑溪市| 金华市| 高雄市|