前兩篇文章分享了基於 vite3 vue3 的元件庫基礎工程 vue3-component-library-archetype 和用於快速建立該工程的工具 yyg-cli,但在中大型的企業級專案中,通常會自主搭建這些腳手架或加速器。優雅哥希望每位前端夥伴能知其所以然,故接下來的文章將進入 Vue3 企業級優雅實戰 系列,整個系列將包括五大部分:
首先會分享如何從 0 開始搭建一套元件庫基礎工程,即如何從 0 實現 vue3-component-library-archetype。
在參考 Element Plus、Ant Design、Van UI 等 Vue3 開源 UI 專案後,優雅哥認為一套企業元件庫工程需要具備如下功能:
node -v
npm -v
各位使用的版本最新大於等於我的版本。我原生的版本如下:
node:8.10.0
npm:7.14.0
npm install -g pnpm
安裝後檢視版本:
pnpm -v
我本地 pnpm 版本號為 7.14.2。
monorepo 單一程式碼庫,是一種程式碼庫的組織方式,與之對應的是 multirepos 多程式碼庫。multirepos 通常是將不同的模組(packages)放在不同的程式碼倉庫中,而 monorepo 是一個程式碼倉庫中存放多個 packages。
在咱元件庫基礎工程專案中,包含了很多個包:多個元件的包、檔案對應的包、cli 包、example 包,如果都在不同的程式碼倉庫中維護,那則需要對應多個倉庫,開發過程中需要在多個倉庫間切換。此外,不同的倉庫間的程式碼相互參照也比較麻煩。所以在元件庫基礎工程採用 monorepo 的方式來組織多個包。
實現 monorepo 有很多方式,Lerna、Yarn Workspace、pnpm Workspace 等,這裡我選擇 pnpm,使用 pnpm 後你會感覺到它的很多好處:速度、磁碟空間等。
關於 pnpm、monorepo 的理論知識,大家自己上網查詢,優雅哥就不寫那些無關痛癢的廢話來湊數了。
建立一個目錄,作為元件庫工程的根目錄,目錄名就使用你定義的元件庫的名稱,我命名為 yyg-demo-ui。用 IDE 開啟該目錄。
在命令列中進入該目錄,使用 pnpm 初始化 package.json:
pnpm init
執行完該命令後,會在專案根目錄下自動生成 package.json 檔案。在 package.json 檔案中指定 type 屬性為 module:
{
...
"type": "module",
...
}
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/
前面建立了四個目錄,需要告訴 pnpm 有哪些包,pnpm 提供了組態檔來設定 monorepo。
packages:
- packages/*
- cli
- docs
- example
# exclude packages that are inside test directories
- '!**/test/**'
上面的設定指定了 cli、docs、example 本身是 package,packages 目錄下的子目錄也是 package。同時排除了所有的 test 目錄。
{
...
"workspaces": [
"packages/*",
"cli",
"docs",
"example"
]
}
到這一步就完成 pnpm + monorepo 的搭建了,專案根目錄稱為 workspace-root,下一步將初始化 workspace-root。
感謝你閱讀本文,如果本文給了你一點點幫助或者啟發,還請三連支援一下,點贊、關注、收藏,程式設計師優雅哥會持續與大家分享更多幹貨