從零構(gòu)建一個(gè)Vue UI組件庫(一)

前言

之所以寫這一系列文章妖枚,是為了記錄自己構(gòu)建一個(gè)組件庫的歷程运提,同時(shí)也給那些自己想寫組件庫的同學(xué)一個(gè)教程鳍寂。組件庫也寫了一段時(shí)間了改含,基本的架子也搭建得差不多了,但是回想自己搭建的過程還是不夠完善迄汛,所以回來整理一遍自己的思路捍壤,讓自己的技術(shù)有個(gè)輸出。

先看下效果ninecat-ui

組件庫源碼ninecat-ui(如果覺得還不錯(cuò)鞍爱,可以給個(gè)start哦)

image
image

下面是我在編寫這個(gè)UI組件庫的一些Todolsit

  • 自定義文檔目錄結(jié)構(gòu)
  • 通過MD來展示組件demo
  • 集成Travis CI
  • 集成單元測試
  • 集成codecov
  • 自動(dòng)構(gòu)建組件文檔
  • 根據(jù)tag自動(dòng)發(fā)布npm
  • 集成docsearch
  • 集成codepen
  • 顏色主題自定義
  • 國際化多語言
  • JavaScript和typescript混合開發(fā)

好鹃觉,那我們就開始吧!

尋找合適的組件庫原型

開始寫組件庫之前睹逃,你需要有一個(gè)好的原型圖盗扇。國內(nèi)比較流行的Element UI和Ant Design都有相應(yīng)的元件庫,如果想練手沉填,完全可以直接那拿來用疗隶。

這里提供兩個(gè)鏈接可去下載相應(yīng)的UI組件庫資源。

https://element.eleme.cn/2.0/#/zh-CN/resource

https://ant.design/docs/spec/download-cn

我用的是Rsuite的UI組件庫翼闹,感覺還不錯(cuò)良心團(tuán)隊(duì)斑鼻。

有了原型就可以開始干活了!

npm初始化項(xiàng)目

既然是從零開始搭建一個(gè)組件庫猎荠,那肯定不能用腳手架來搭建了坚弱,那就不叫從零開始了,所有我們直接npm init開始項(xiàng)目法牲。

mkdir ninecat-ui
cd ninecat-ui
npm init
image

到這里項(xiàng)目初始化算成功了,下面來裝一下必要的依賴琼掠。

安裝依賴

依據(jù)我安裝依賴的經(jīng)驗(yàn)拒垃,把依賴分為這幾種:核心依賴、構(gòu)建依賴瓷蛙、工具依賴悼瓮。當(dāng)然這是我按照功能性去區(qū)分的,更專業(yè)的分類請看 https://zhuanlan.zhihu.com/p/29855253

這里我們用yarn來安裝依賴〖桠現(xiàn)在安裝依賴先不區(qū)分哪種依賴類型横堡,直接yarn add就行,等后面架子搭建好了再來區(qū)分屬于那類依賴冠桃,然后重構(gòu)一下package.json文件命贴,關(guān)于package.json更加詳細(xì)的文檔可以參考 https://docs.npmjs.com/files/package.json

一個(gè)基本的VUE項(xiàng)目大概需要這些依賴:
vue、webpack、webpack-cli胸蛛、webpack-dev-server污茵、@babel/core、babel-loader葬项、css-loader泞当、html-webpack-plugin、vue-loader
民珍、vue-template-compiler

Hello World

依賴裝好了襟士,我們來定義一下項(xiàng)目html模版,入口文件和VUE主頁文件嚷量,根目錄新建index.html,新建src目錄陋桂,src下新建一個(gè)index.js和index.vue。

index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>ninecat-ui</title>
</head>
<body>
  <div id="app"></div>
</body>
</html>

index.vue

<template>
  <div>Hello Ninecat-ui</div>
</template>

<script>
export default {
  name:'App'
}
</script>

index.js

import Vue from 'vue'
import App from './index.vue'

new Vue({
  render: h => h(App)
}).$mount('#app')

內(nèi)容好了津肛,現(xiàn)在需要簡單的配置一下webpack讓項(xiàng)目運(yùn)行起來章喉。

在跟目錄下新建一個(gè)build目錄,里面新增一個(gè)webpack配置文件webpack.config.base.js

'use strict'
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { VueLoaderPlugin } = require('vue-loader')
const path = require('path')

module.exports = {
  entry: path.resolve(__dirname, '../src/index.js'),
  output: {
    path: path.resolve(__dirname, '../dist'),
    filename: "index.js"
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        loader: "babel-loader",
        exclude: /node_modules/
      },
      {
        test: /\.vue$/,
        loader: 'vue-loader'
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './index.html',
      filename: 'index.html',
    }),
    new VueLoaderPlugin(),
  ]
}

如果有同學(xué)還不懂這些基本的配置身坐,應(yīng)該去翻一下webpack的官方文檔了哦秸脱,給出鏈接:https://www.webpackjs.com/

進(jìn)行如上配置,一個(gè)基本的VUE項(xiàng)目就搭建差不多了部蛇,然后我們需要配置一下項(xiàng)目的啟動(dòng)腳本摊唇。在package.json里面scripts下進(jìn)行如下配置:

"scripts": {
    "start": "webpack-dev-server --config build/webpack.config.base.js"
 },

最后來看一下我們的項(xiàng)目目錄結(jié)構(gòu):

image

然后運(yùn)行一下我們的項(xiàng)目:yarn start

image

OK,到這里基本的一個(gè)vue項(xiàng)目搭建好了涯鲁,我們后面就可以開始構(gòu)建組件了巷查。

第一節(jié)源碼在ninecat-ui/ninecat-train tag1.0.0

下一章:
從零構(gòu)建一個(gè)Vue UI組件庫(二)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市抹腿,隨后出現(xiàn)的幾起案子岛请,更是在濱河造成了極大的恐慌,老刑警劉巖警绩,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件崇败,死亡現(xiàn)場離奇詭異,居然都是意外死亡肩祥,警方通過查閱死者的電腦和手機(jī)后室,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來混狠,“玉大人岸霹,你說我怎么就攤上這事〗龋” “怎么了贡避?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵痛黎,是天一觀的道長。 經(jīng)常有香客問我贸桶,道長舅逸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任皇筛,我火速辦了婚禮琉历,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘水醋。我一直安慰自己旗笔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布拄踪。 她就那樣靜靜地躺著蝇恶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惶桐。 梳的紋絲不亂的頭發(fā)上撮弧,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機(jī)與錄音姚糊,去河邊找鬼贿衍。 笑死,一個(gè)胖子當(dāng)著我的面吹牛救恨,可吹牛的內(nèi)容都是我干的贸辈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肠槽,長吁一口氣:“原來是場噩夢啊……” “哼擎淤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起秸仙,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤嘴拢,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后寂纪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體席吴,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年弊攘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了抢腐。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片姑曙。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡襟交,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伤靠,到底是詐尸還是另有隱情捣域,我是刑警寧澤啼染,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站焕梅,受9級(jí)特大地震影響迹鹅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贞言,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一斜棚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧该窗,春花似錦弟蚀、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至规肴,卻和暖如春捶闸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拖刃。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工删壮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人序调。 一個(gè)月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓醉锅,卻偏偏與公主長得像,于是被迫代替她去往敵國和親发绢。 傳聞我的和親對象是個(gè)殘疾皇子硬耍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容

  • UI組件 element- 餓了么出品的Vue2的web UI工具套件 Vux- 基于Vue和WeUI的組件庫 m...
    王喂馬_閱讀 6,453評論 1 77
  • UI組件 element- 餓了么出品的Vue2的web UI工具套件 Vux- 基于Vue和WeUI的組件庫 m...
    流觴小菜鳥閱讀 1,760評論 2 8
  • UI組件 element- 餓了么出品的Vue2的web UI工具套件 Vux- 基于Vue和WeUI的組件庫 m...
    小姜先森o0O閱讀 9,475評論 0 72
  • 基于Vue的一些資料 內(nèi)容 UI組件 開發(fā)框架 實(shí)用庫 服務(wù)端 輔助工具 應(yīng)用實(shí)例 Demo示例 element★...
    嘗了又嘗閱讀 1,149評論 0 1
  • 輾轉(zhuǎn)北固樓, 倚馬望揚(yáng)州边酒。 惟有長江千里煙波经柴,無語東流。 未見驚濤拍岸墩朦, 難覓當(dāng)年孫劉坯认。 曉是千古第一江山,空余詩...
    古岳言閱讀 821評論 0 5