本项目地址:https://github.com/husilang/vue-ui-demo

项目参考文章:从零开始搭建Vue组件库 VV-UI

项目的初衷是学习怎么封装一个基于Vue的UI组件库,顺便记录每个步骤,以及在此过程中遇到的难点及体会。

下面是我个人的一个项目搭建流程,希望能帮助大家。

①脚手架初始化项目

使用 vue cli 3.0.0版本以上,在node或cmd中输入以下命令创建项目

vue create project-name

选择 Manually select features
选择Babel,Router,Vuex,CSS Pre-processors,Unit Testing
选择Sass/SCSS(with node-sass)
选择Mocha + Chai
选择In dedicated config files
以上来安装(按需选择)
运行如下命令:

cd project-name
npm run serve

看项目是否成功启动,启动成功恭喜你完成第一小步~

②目录结构修改

src目录修改为examples,用来组件示例
在examples目录下,新建docs文件夹,用来编写各组件的文档
在项目下新增packages文件夹,用来存放封装的组件

③增加配置文件

由于修改了目录结构,需要修改相关配置,这里参考vue cli官网。
在项目根目录下,增加配置文件vue.config.js,代码如下:

const path = require("path");
module.exports = {
pages: {
index: {
entry: "examples/main.js", // js入口文件修改
template: "public/index.html",
filename: "index.html"
}
},
chainWebpack: config => {
// 重新设置目录别名
config.resolve.alias
.set("@", path.resolve("examples"))
.set("~", path.resolve("packages"));
// 使 examples及packages目录下的js文件都加入编译
config.module
.rule("js")
.include.add("/packages")
.end()
.include.add("/examples")
.end()
.use("babel")
.loader("babel-loader");
},
}

运行npm run serve 查看是否能成功启动

④编写第一个组件

接下来,就是要封装第一个组件,由于此文档的重点不是讲解组件怎么封装,那我们就先写一个简单的组件用来测试好了。

编写组件前,我先去了解了一下css命名规范BEM

看了几篇关于BEM的文章后,还是比较模糊,实践出真知,在以后的组件封装中,我会慢慢去使用这种规范。

在packages下封装一个test组件

在packages下新建一个文件夹test,test目录下新建index.js文件以及src/test.vue,如下:
在packages/test/src/test.vue中

<template>
<div class="zm-test" :style="{backgroundColor: bgColor}"></div>
</template> <script>
export default {
name: 'ZmTest',
props: {
bgColor: {
type: String,
default: "#ccc"
}
}
}
</script> <style lang="scss">
.zm-test {
display: inline-block;
width: 10px;
height: 10px;
border-radius: 50%;
animation: zm-opacity 2s infinite linear;
}
@keyframes zm-opacity{
0% {opacity:1}
10%,90%{opacity:.8}
20%,80%{opacity:.7}
30%,70%{opacity:.5}
40%,60%{opacity:.3}
50%{opacity:0}
100%{opacity:.95}
}
</style>

在packages/test/index.js中

import ZmTest from './src/test.vue'

// 支持按需引用
ZmTest.install = function (Vue) {
Vue.component(ZmTest.name, ZmTest);
}; export default ZmTest;

在packages下新建index.js

在packages/index.js中

import ZmTest from './test/index'

const components = [
ZmTest
]; const install = function (Vue) {
if (install.installed) return;
components.map(component => Vue.component(component.name, component));
}; if (typeof window.Vue !== "undefined" && window.Vue) {
install(window.Vue);
} export default {
install,
ZmTest
}

在examples下引用示例

在examples/main.js中

// do something...

import ZmUI from '../packages/index'

Vue.use(ZmUI);

// do something...

在examples/views/Home.vue中引用test组件

<template>
<div class="home">
<img alt="Vue logo" src="../assets/logo.png">
<HelloWorld msg="Welcome to Your Vue.js App"/>
<zm-test bgColor="blue"></zm-test>
</div>
</template> <script>
// @ is an alias to /examples
import HelloWorld from '@/components/HelloWorld.vue' export default {
name: 'home',
components: {
HelloWorld
}
}
</script>

启动程序后,在"http://localhost:8080/#/home"可以看到我们封装的test组件能正常使用了~

⑤编写第一个组件的文档

小白对md的写法一窍不通...所以先去了解了md文件的常见语法,参考文章:如何写md格式的文档
此过程分为两步,第一步使.md文件正常展示,可以看到运行结果以及代码展示,第二步封装一个代码展示的组件,使起可以展开收起,高亮显示。

编写文档

在examples/docs下新建一个test.md文件,随意写点介绍,内容如下:

# 测试组件

测试组件是用来测试md文档是否能在项目中像vue文件一样正常展示代码运行结果

运行结果如下
<zm-test bgColor="red"></zm-test> 代码如下
`<zm-test bgColor="red"></zm-test>`

安装工具

对md文件需要一个编译工具--vue-markdown-loader
在本项目下,用命令行工具运行以下命令

npm run vue-markdown-loader -D

修改配置文件

修改vue.config.js,使md文件能像vue文件一样在项目里展示

// do something...

module.exports = {
// do something... chainWebpack: config => {
// do something... // 使用vue-markdown-loader
config.module.rule("md")
.test(/\.md/)
.use("vue-loader")
.loader("vue-loader")
.end()
.use("vue-markdown-loader")
.loader("vue-markdown-loader/lib/markdown-compiler")
}, // do something...
}

添加路由

在router.js里添加测试文档的路由

// do something...

export default new Router({
routes: [
{
path: '/',
name: 'home',
component: Home
},
{
path: '/about',
name: 'about',
component: () => import(/* webpackChunkName: "about" */ '../views/About.vue')
},
{
path: '/test',
name: 'test',
component: () => import('../docs/test.md')
}
]
})

查看结果

重新启动程序(注意,只要修改了vue.config.js文件,程序都需要重新启动),打开"http://localhost:8080/#/test"可以看到文字代码展示以及一个小红点在闪烁,代表第一步完美结束~

封装代码展示组件

开始第二步。
以上,我们完成了md文件的正常展示,但是我们可以将代码展示做得更好,封装一个代码展示的组件,使示例代码可以展开收起,代码高亮等。
感兴趣的可以了解一下markdown-it
我还在了解中,以后会更新上。

⑥让项目在github上展示

参考文章:https://segmentfault.com/a/1190000017084155

项目已经完成一小半了,我已经迫不及待将它传到github上记录下来。
在本地我能直观地看到我的项目成果了,现在希望能在github上有个演示地址,让别人也能直观地看到我的项目展示。通过github文档及相关资料搜索,我找到了解决方案。如下:

安装工具

在项目下安装gh-pages工具

npm install gh-pages -D

增加部署命令

package.json文件修改scripts命令

"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"test:unit": "vue-cli-service test:unit",
"predeploy": "npm run build",
"deploy": "gh-pages -d dist"
},

修改配置

vue.config.js需要修改publicPath配置

module.exports = {
// do something...
publicPath: process.env.NODE_ENV === 'production' ? '/project-name/' : '/', //由于我的项目在github上名为zm-ui,所以我的project-name为zm-ui
// do something...
}

打包部署

在node或cmd运行以下命令

npm run deploy

看到"Published"恭喜你部署成功,接下来可以到github上查看你的项目,是否多了一个分支gh-pages

在github上修改项目设置

在github你的项目下,找到"Settings"下的"GitHub Pages", "Source"选择"gh-pages branch"保存成功后,就拥有演示地址了~~


以上,未完待续...

基于Vue搭建自己的组件库(1)的更多相关文章

  1. 基于Vue的前端UI组件库的比对和选型

    大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 由于录制视频的需要,要做前端UI组件库的选型.平时国内外也见了不少基于Vue的UI ...

  2. 一款基于Vue的扩展性组件库 VV-UI

    github: https://github.com/VV-UI/VV-UI 演示地址: https://vv-ui.github.io/VV-UI/#/meta-info 1. LoadingBar ...

  3. Vue项目中使用基于Vue.js的移动组件库cube-ui

    cube-ui 是滴滴公司的技术团队基于 Vue.js 实现的精致移动端组件库.很赞,基本场景是够用了,感谢开源!感谢默默奉献的你们. 刚爬完坑,就来总结啦!!希望对需要的朋友有小小的帮助. (一)创 ...

  4. GearCase UI - 自己构建一套基于 Vue 的简易开源组件库

    最近 1 ~ 2 月除了开发小程序之外,还一直在继续深入的学习 Vuejs.利用零碎.闲暇的时间整合了一套基于 Vue 的 UI 组件库.命名为 GearCase UI,意为齿轮盒.现在把该项目进行开 ...

  5. rtvue-lowcode:一款基于uniapp框架和uview组件库的开源低代码开发平台

    rtvue-lowcode低代码开发平台 rtvue-lowcode一款基于uniapp框架和uview组件库的低代码开发平台,项目提供可视化拖拽编辑器,采用MIT开源协议,适用于app.小程序等项目 ...

  6. 整理目前支持 Vue 3 的 UI 组件库 (2021 年)

    最近,让前端圈子振奋的消息莫过于 Vue 3.0 的发布,一个无论是性能还是 API 设计都有了重大升级的新版本.距离 Vue 3.0 正式版发布已经有一段时间了,相信相关生态周边库也正在适配新版本中 ...

  7. 记:使用vue全家桶 + vux组件库 打包成 dcloud 5+ app 开发过程中遇到的问题

    vue-cli 版本:2.9.6   webpack 版本:3.6.0 1. vue-cli 安装好之后,不是自动打开默认浏览器 在 config文件夹 ---> dev选项中,有个 autoO ...

  8. Vue——解决使用第三方组件库时无法修改默认样式的问题(使用 /deep/ )

    最近在开发一个基于Vue的后台管理系统,其中使用了element-ui第三方ui组件库.使用过组件库的人都知道,第三方组件往往会有一些默认的样式,而有些又是我们想要改变的. 一.基础(了解 <s ...

  9. 从零搭建react+ts组件库(封装antd)

    为什么会有这样一篇文章?因为网上的教程/示例只说了怎么做,没有系统详细的介绍引入这些依赖.为什么要这样配置,甚至有些文章还是错的!迫于技术洁癖,我希望更多的开发小伙伴能够真正的理解一个项目搭建各个方面 ...

随机推荐

  1. 如何使用IE9浏览器自带开发人员工具捕获网页请求

    我们在通过浏览器访问一个网页的时候,有时候会遇到页面不能正常显示,图片不能正常加载的问题. 如果我们需要知道浏览器打开该网页时,网页中每个元素的加载情况.这时,我们便可以借助浏览器自带开发人员工具,来 ...

  2. 链表数据-PHP的实现

    首先,链表数据的结构是: 其次,链表数据的结构特点: 随后,填充链表结构: 链表结构的数据,从链表尾部塞入数据. 最后,删除链表结构:

  3. 这是那些大佬程序员常用的学习java网站,这就是别人薪资上万的原因

    大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们.主要有:电子书搜索.实用工具.在线视频 ...

  4. 0day笔记(1)PE文件格式与虚拟文件内存的映射

    PE文件格式 PE 文件格式把可执行文件分成若干个数据节(section),不同的资源被存放在不同的节中. 一个典型的 PE 文件中包含的节如下: .text 存放着二进制的机器代码 .data 初始 ...

  5. nginx+vue+thinkphp5.1部署,解决前端刷新404,以及前端404解决后,后台又404的问题

    宝塔的话直接在网站的伪静态一栏中如下就行 location /admin { if (!-e $request_filename){ rewrite ^(.*)$ /index.php?s=$1 la ...

  6. 探索ORACLE之ASM概念(完整版)

    探索ORACLE之ASM概念(完整版) 本文出自https://www.jb51.net/article/43527.htm ASM是Oracle 10g R2中为了简化Oracle数据库的管理而推出 ...

  7. Visual Studio 添加图标和版本

    在Visual Studio中,如果你创建的是纯C语言的工程,那么给可执行程序添加图标就没有便捷的入口. 但也只是入口不好找了,添加步骤还是比较简单的,以下为具体操作方法:     1. 右键点击C工 ...

  8. MySQL 入门(1):查询和更新的内部实现

    摘要 在MySQL中,简单的CURD是很容易上手的. 但是,理解CURD的背后发生了什么,却是一件特别困难的事情. 在这一篇的内容中,我将简单介绍一下MySQL的架构是什么样的,分别有什么样的功能.然 ...

  9. OpenCV学习(2)——一个简单的例子

    光说不练假把式,来看一个简单的例子,了解了解OpenCV.这个小demo没有几行代码,作用是显示项目目录下面的一张图片. #include <opencv2\opencv.hpp> #in ...

  10. hdu_1052 Tian Ji -- The Horse Racing 贪心

    Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...