前兩篇文章分享了基于 vite3 vue3 的組件庫基礎工程 vue3-component-library-archetype 和用于快速創建該工程的工具 yyg-cli,但在中大型的企業級專案中,通常會自主搭建這些腳手架或加速器,優雅哥希望每位前端伙伴能知其所以然,故接下來的文章將進入 Vue3 企業級優雅實戰 系列,整個系列將包括五大部分:
首先會分享如何從 0 開始搭建一套組件庫基礎工程,即如何從 0 實作 vue3-component-library-archetype,
1 組件庫工程應該具備的功能
在參考 Element Plus、Ant Design、Van UI 等 Vue3 開源 UI 專案后,優雅哥認為一套企業組件庫工程需要具備如下功能:
- 組件庫的開發:這是最基礎的,組件庫工程必須要支持組件庫的開發,在工程中開發各種組件;
- 組件庫的構建:組件庫開發完成后,不可能讓所有使用該組件庫的專案都使用原始碼的方式引入到各個專案中,而是要將其構建打包后發布到私服或 npm 上,各個專案通過依賴的方式引入使用,在這個程序中,就涉及型別定義的提取、不同模塊化規范的打包等;
- 組件庫的發布:上面提到組件庫構建打包后需要發布到私服或 npm,那難道在組件庫開發階段就頻繁的發布到私服上嗎?這樣做也沒問題,不過優雅哥的建議是在本地啟動一個迷你私服,當組件庫開發到一個階段(如 beta版本)可以提供給其他專案使用時,便可以按照常規流程發布到公司的私服或 npm 上,
- 組件庫檔案的撰寫和發布:通常會采用 MarkDown 來撰寫組件庫的操作手冊、每個組件的 API(props 組件的輸入屬性、events 組件提供的事件、methods 組件暴露的方法、slots 組件支持的插槽)、組件的使用說明、Demo 展示、Demo 對應的代碼等,組件庫檔案中的 Demo 不僅給使用者參考,還可以使用它來除錯組件,在檔案撰寫完成后,需要將檔案構建打包發布到 HTTP 服務上,供開發同事查看,
- 組件庫開發工具 cli:每次新創建一個組件,都需要創建一套組件目錄檔案結構、注冊該組件、在檔案中添加該組件檔案、Demo等操作,整個程序繁瑣且沒價值,而組件庫可能會有幾十個組件,所以很有必要開發一個 cli 用于快速創建組件,同時實作創建組件的規范化,
- 組件庫 example 的開發和發布:這個是非必須的,在組件庫中添加這個部分是基于兩個方面考慮,其一是可以開發一個演示站點,用來展示組件庫在專案中的實作效果;其二是在我的實踐中,組件的開發通常由業務開發驅動,在開發 example 的程序中逐步完善組件庫中的組件,當組件實作到一定的程度后,便可以將 example 抽取到獨立的工程中,
2 環境準備
- Node JS 和 npm 版本:
node -v
npm -v
各位使用的版本最新大于等于我的版本,我本地的版本如下:
node:8.10.0
npm:7.14.0
- 安裝或更新 pnpm:
npm install -g pnpm
安裝后查看版本:
pnpm -v
我本地 pnpm 版本號為 7.14.2,
3 搭建 monorepo 專案
monorepo 單一代碼庫,是一種代碼庫的組織方式,與之對應的是 multirepos 多代碼庫,multirepos 通常是將不同的模塊(packages)放在不同的代碼倉庫中,而 monorepo 是一個代碼倉庫中存放多個 packages,
在咱組件庫基礎工程專案中,包含了很多個包:多個組件的包、檔案對應的包、cli 包、example 包,如果都在不同的代碼倉庫中維護,那則需要對應多個倉庫,開發程序中需要在多個倉庫間切換,此外,不同的倉庫間的代碼相互參考也比較麻煩,所以在組件庫基礎工程采用 monorepo 的方式來組織多個包,
實作 monorepo 有很多方式,Lerna、Yarn Workspace、pnpm Workspace 等,這里我選擇 pnpm,使用 pnpm 后你會感覺到它的很多好處:速度、磁盤空間等,
關于 pnpm、monorepo 的理論知識,大家自己上網查詢,優雅哥就不寫那些無關痛癢的廢話來湊數了,
3.1 創建專案
- 創建專案根目錄
創建一個目錄,作為組件庫工程的根目錄,目錄名就使用你定義的組件庫的名稱,我命名為 yyg-demo-ui,用 IDE 打開該目錄,
- 初始化 package.json
在命令列中進入該目錄,使用 pnpm 初始化 package.json:
pnpm init
執行完該命令后,會在專案根目錄下自動生成 package.json 檔案,在 package.json 檔案中指定 type 屬性為 module:
{
...
"type": "module",
...
}
- git 初始化:
git init
- 創建目錄
在專案根目錄下分別創建 cli、docs、example、packages 四個目錄,分別存放命令列工具、組件庫檔案、example、組件庫四大模塊,并在 packages 目錄下創建 foo 和 yyg-demo-ui (yyg-admin-ui 需修改為你的組件庫名)兩個目錄,
mkdir -p cli docs example packages/foo packages/yyg-demo-ui
目錄結構如下:
yyg-demo-ui/
|- cli/
|- docs/
|- example/
|- packages/
|- foo/
|- yyg-demo-ui/
3.2 配置 workspace
前面創建了四個目錄,需要告訴 pnpm 有哪些包,pnpm 提供了組態檔來配置 monorepo,
- 在專案根目錄下創建組態檔 pnpm-workspace.yaml:
packages:
- packages/*
- cli
- docs
- example
# exclude packages that are inside test directories
- '!**/test/**'
上面的配置指定了 cli、docs、example 本身是 package,packages 目錄下的子目錄也是 package,同時排除了所有的 test 目錄,
- 在 package.json 中指定 workspace:
{
...
"workspaces": [
"packages/*",
"cli",
"docs",
"example"
]
}
到這一步就完成 pnpm + monorepo 的搭建了,專案根目錄稱為 workspace-root,下一步將初始化 workspace-root,
感謝你閱讀本文,如果本文給了你一點點幫助或者啟發,還請三連支持一下,點贊、關注、收藏,程式員優雅哥會持續與大家分享更多干貨
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/528835.html
標籤:其他
上一篇:JS資料結構與演算法-佇列結構
下一篇:JS資料結構與演算法-佇列結構
