本文旨在給你們提供一種構建一個完整UI庫腳手架的思路:包括如何快速並優雅地構建UI庫的主頁、如何託管主頁、如何編寫腳本提高本身的開發效率、如何生成CHANGELOG等等,這裏提供了一個Demo可供你們參考:vue
在線Demo地址git
GitHub源碼地址github
主流的開源UI庫代碼結構主要分爲三大部分:web
咱們先用vue-cli3初始化一個模板,而後在根目錄下新增三個文件夾,一個用來存放 組件 的代碼(packages
),一個用來存放 預覽示例的網站 代碼(examples
)(這裏直接把初始化模板的src
目錄更改成examples
便可),一個用來存放 腳本 代碼(build
)vue-cli
文件的名字能夠根據本身喜愛去命名。npm
具體的代碼組織方式能夠查看Github上的源碼,這裏須要注意,咱們儘可能以組件名來命名文件夾名,而後在文件夾內新建index.vue
組件。這麼作是爲了方便後面咱們用代碼直接生成index.js
入口文件的內容。json
爲了更好的處理樣式,咱們把全部的樣式文件單獨處理(代碼地址),這裏主要用Gulp來處理任務。bash
當咱們完成了一個組件,就能夠打包了,打包很簡單,這得益於vue-cli3的build
命令引入了構建目標參數,只需執行markdown
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咱們能夠本身手寫MD文檔,固然這並不明智。咱們更但願的是用代碼去自動化生成,原理無非就是提取你的git提交信息並寫入文件,這裏咱們能夠用conventional-changelog來生成CHANGELOG。爲了生成更精細和正確的CHANGELOG文檔,咱們須要嚴格規範本身的提交記錄,咱們能夠用conventional-changelog
的標準提交記錄:cz-conventional-changelog,具體的用法能夠參考cz-cli。本項目的package.json的init
腳本其實也封裝了相關的腳本命令,能夠參考。