自己技术不精,轻易玩玩,仅供参考,文章开端提供残缺源码。

集体认为,当初市面上的组件库太多了,其实是不须要咱们本人去建的,轻易拿进去一个都能够满足根本开发需要,如果想要玩一玩的能够试着本人搭建一个。

首先简略一点,应用Vue-cli 搭建一个我的项目构造。
为了能随时看到成果,咱们默认将src作为援用组件的入口,用来调试组件成果;还须要创立一个components(名字随便)文件夹用来寄存组件。目录构造如下

├─node_modules├─public├─components //寄存组件├─src  //援用组件    ├─components    ├─assets    ├─App.vue    ├─router.js    ├─index.js  //自建文件,引入组件库    └─main.js├─babel.config├─package.json└─README.md

接下来,就正式进入搭建组件环节

1. 创立组件目录
咱们以button组件为例,为了款式能够按需引入,以及使用者能够不便批改款式,咱们把css拿进去独自编写,当然如果你只是为了编写一个组件供多数人应用,也能够间接写在.vue里,一个组件蕴含以下文件:

├─components   ├─style  // 款式文件      ├─index.scss  //全局款式      ├─base.scss  //共用款式      └─button.scss  //独自组件款式  └─button //组件文件      ├─index.js //独自打包文件      └─src        ├─main.vue  //编写组件        └─myBtn.md //显示示例

2. 编写组件
在 main.vue 写一个组件,代码如下

<template>  <button @click="btnClick" :class="['btn',`btn-${type}`]">    <!-- 插槽 -->    <slot></slot>  </button></template><script>export default {  name:'myBtn',  props:{    // `medium` / `small` / `mini`    size:{      type:String,      default:'medium'    },    // `primary` / `success`    type:{      type:String,      default:'primary'    }  },  methods:{    btnClick(){      // 这是点击事件      this.$emit('点击')    }  }}</script>
通过 :class="['btn',btn-${type}]" 对传入的不同类型的按钮进行款式更改

在style文件夹对应的scss里写一些款式,代码如下:

.btn{    width:150px;    height: 40px;    border:none;    font-size:16px;    color:#fff;}.btn-primary{    background:blue;}.btn-success{    background:green;}

在index.js里对组件进行注册,代码如下:

import Mybtn from "./src/main.vue"Mybtn.install = function(Vue) {  Vue.component(Mybtn.name, Mybtn);};export default Mybtn;

3. 应用组件
当初一个组件就实现了,咱们来应用一下看看成果
在main.js引入组件及款式(我这里全局引入,也能够按需引入)

import Vue from 'vue'import App from './App.vue'import {Mybtn} from "./index.js"import "../components/style/index.scss";Vue.use(Mybtn)Vue.config.productionTip = falsenew Vue({  render: h => h(App),}).$mount('#app')

能够在App.vue 应用一下

<template>  <div id="app">   <Mybtn >惯例按钮</Mybtn>   <Mybtn type='success'>胜利按钮</Mybtn>  </div></template><script>export default {  name: 'App',}</script><style></style>

一个按钮组件就进去了


4. 生成组件库文档

组件实现后,为了用户能够更直观的应用,就须要创立组件文档了,我应用的是@Vuese/cli,很简略易用,具体装置教程参考文档 @vuese/cli
装置实现后,执行 vuese gen
此时,根目录就会呈现【website】目录,你的组件文档就生成了,目录如下
website
├── index.html
├── components
├──├── myBtn.md
├──├── HelloWorld.md

这里要标记重点了!!其实我只建了一个myBtn的组件,然而目录却进去了两个,这是因为vuese会自动识别.vue后缀文件,咱们能够规定一下他的生成门路

官网:vuese 会在命令的运行目录搜寻 vuese.config.js 或 .vueserc 或者是 package.json 文件的 vuese 属性

所以咱们在根目录下新建一个.vueserc,给它配置一下

{  "include": [    "./components/**/*.vue" //指定被生成的.vue文件  ],  "title": "组件文档",  //组件题目  "genType": "docute"  //组件类型}

删掉website(目录下已有文件从新打包的时候不会主动删除,所以倡议删掉从新生成一份),执行 vuese gen ,这个时候就只有一个myBtn了,重新启动后,组件文档就进去啦,太不便了,页面如下:

还有一个问题须要留神:生成的文档是没有首页的,如果你点击题目,能够看到路由变成了’/‘ ,页面显示404,这个时候,就须要咱们手动加一个首页了,很简略,咱们在website目录下手动写一个README.md 文件,(文件名肯定是README!),打包文档的时候会自动识别为路由’/’,目录如下:
website
├── index.html
├── README.md
├── components
├──├── myBtn.md

README.md 就轻易写

# 文档阐明这是首页

这个时候再看一下


5. 实现组件文档可预览,并且对整个组件进行打包
vuese只能生成一个纯文档,只有大片大片的文字,没有组件预览成果,以及应用示例,咱们只能手动增加了,还记得咱们一开始留了一个放组件预览的中央!

预览实现过程:

  • 因为文档每次打包的时候,内容都会从新生成一遍,即便给它手动增加了预览代码以及事件动作,它也会在从新打包后回到原来的内容,这种形式显然不可取 ×
  • 所以咱们预留一个独自写预览性能的md文件,在执行vuese gen 文档打包的时候,利用gulp将两个md文件合并,这个时候,就是既有预览,又有组件了。
因为一开始没有找到很全的参考资料,不是短少预览,就是打包太随便,所以我在做打包和预览的时候,参考交融了这两篇文章的内容,组件预览性能、 打包性能( 大家能够点进去看看,作者的打包过程写的很具体)造成了一个比拟全面的组件全流程,因为文章里都很具体,我这里就不多介绍实现过程了,至于交融怎么做,能够戳文章底部的我的github看看。
  • 事件和款式一起增加到文档里
    咱们能够在website目录外,新建一个index.html,引入款式及js,再把这个新建的index.html将website文件夹里的index.html替换掉(同样gulp),这个时候,文档性能就曾经很全了。
    此时的目录构造
    根目录
    ├── website
    ├── gulpfile.js //新增
    ├── document //新增目录
    ├──├── index.html //新建文件

此时启动文档页面

到当初,一个残缺的组件性能流程就进去了
打包和公布我会从新写一篇文章


残缺示例戳github
github地址