前言
本文旨在給大家提供一種構建一個完整UI庫腳手架的思路:包括如何快速並優雅地構建UI庫的主頁、如何託管主頁、如何編寫指令碼提升自己的開發效率、如何生成CHANGELOG等等,這裡提供了一個Demo可供大家參考:
初始化目錄結構
主流的開源UI庫程式碼結構主要分為三大部分:
我們先用vue-cli3初始化一個模板,然後在根目錄下新增三個資料夾,一個用來存放 元件 的程式碼(packages
),一個用來存放 預覽示例的網站 程式碼(examples
)(這裡直接把初始化模板的src
目錄更改為examples
即可),一個用來存放 指令碼 程式碼(build
)
檔案的名字可以根據自己喜好去命名。
完成一個元件
具體的程式碼組織方式可以檢視Github上的原始碼,這裡需要注意,我們儘量以元件名來命名資料夾名,然後在資料夾內新建index.vue
元件。這麼做是為了方便後面我們用程式碼直接生成index.js
入口檔案的內容。
樣式檔案的分離
為了更好的處理樣式,我們把所有的樣式檔案單獨處理(程式碼地址),這裡主要用Gulp來處理任務。
釋出NPM包
打包
當我們完成了一個元件,就可以打包了,打包很簡單,這得益於vue-cli3的build
命令引入了構建目標引數,只需執行
vue-cli-service build --target lib --name vue-cards --dest lib packages/index.js
複製程式碼
就可以把packages
下所有的程式碼以庫
模式打包出去。
在庫模式中,Vue 是外接的。這意味著包中不會有 Vue,即便你在程式碼中匯入了 Vue。如果這個庫會通過一個打包器使用,它將嘗試通過打包器以依賴的方式載入 Vue;否則就會回退到一個全域性的 Vue 變數。
釋出
釋出之前,我們需要新增一個.npmignore
檔案,把一些不需要釋出到npm
包的檔案或者資料夾都寫在裡面,寫法和.gitignore
一致。
具體怎麼釋出一個npm
包這裡就不在贅述了。
文件的編寫和釋出
編寫
可能大多數人覺得寫一個開源UI庫最頭疼的事情就是寫文件,如何快速又優雅的構建出像ElementUI官網這類網站呢?
目前最流行的寫文件的方式就是通過markdown
編寫,那我們要解決的就是如何將Markdown文件HTML化,直接展示在頁面中。
這裡我們可以用vue-markdown-loader外掛,該外掛的具體配置可以檢視專案的vue.config.js檔案。
具體到本專案的效果如圖所示:
markdown
編寫的,其他部分則是普通的vue
元件。
釋出
我們可以利用GithubPages功能來發布我們的文件網站,具體的使用方法網上有很多教程,比如GitHub Pages 使用入門。
其實還有一種很簡單的方式,可以用gh-pages
這個工具,一鍵釋出到對應倉庫的gh-pages
分支。具體配置和使用可以參考本專案的build/publish-docs.js
檔案。
提高開發效率的一些做法
在本專案的build
資料夾下,有很多能夠大大提升我們開發效率的檔案,下面來一一講解一下它們的用途。
get-components.js
檔案主要為了獲取packages
目錄下所有的元件目錄,為我們構建packages
下的入口檔案做準備。
build-entry.js
檔案主要是根據get-components.js
的結果,然後將程式碼寫入/packages/index.js
,生成入口檔案。
build-lib.js
檔案主要是做一些釋出npm包前的構建準備,包括構建入口檔案、構建庫、構建樣式檔案等。
publish-docs.js
檔案的作用是可以一鍵釋出文件到本倉庫的gh-pages
分支。
release.sh
指令碼檔案主要是把一些釋出npm包的命令集合在了一起,包括很多git和npm操作。
快速生成CHANGELOG
CHANGELOG我們可以自己手寫MD文件,當然這並不明智。我們更希望的是用程式碼去自動化生成,原理無非就是提取你的git提交資訊並寫入檔案,這裡我們可以用conventional-changelog來生成CHANGELOG。為了生成更精細和正確的CHANGELOG文件,我們需要嚴格規範自己的提交記錄,我們可以用conventional-changelog
的標準提交記錄:cz-conventional-changelog,具體的用法可以參考cz-cli。本專案的package.json的init
指令碼其實也封裝了相關的指令碼命令,可以參考。
參考
- vant - Lightweight Mobile UI Components built on Vue
- element - A Vue.js 2.0 UI Toolkit for Web
- vue - Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
- 詳解:Vue cli3 庫模式搭建元件庫併發布到 npm