基于Vue搭建自己的组件库(1)
本项目地址: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)的更多相关文章
- 基于Vue的前端UI组件库的比对和选型
大家好,我是张飞洪,感谢您的阅读,我会不定期和你分享学习心得,希望我的文章能成为你成长路上的垫脚石,让我们一起精进. 由于录制视频的需要,要做前端UI组件库的选型.平时国内外也见了不少基于Vue的UI ...
- 一款基于Vue的扩展性组件库 VV-UI
github: https://github.com/VV-UI/VV-UI 演示地址: https://vv-ui.github.io/VV-UI/#/meta-info 1. LoadingBar ...
- Vue项目中使用基于Vue.js的移动组件库cube-ui
cube-ui 是滴滴公司的技术团队基于 Vue.js 实现的精致移动端组件库.很赞,基本场景是够用了,感谢开源!感谢默默奉献的你们. 刚爬完坑,就来总结啦!!希望对需要的朋友有小小的帮助. (一)创 ...
- GearCase UI - 自己构建一套基于 Vue 的简易开源组件库
最近 1 ~ 2 月除了开发小程序之外,还一直在继续深入的学习 Vuejs.利用零碎.闲暇的时间整合了一套基于 Vue 的 UI 组件库.命名为 GearCase UI,意为齿轮盒.现在把该项目进行开 ...
- rtvue-lowcode:一款基于uniapp框架和uview组件库的开源低代码开发平台
rtvue-lowcode低代码开发平台 rtvue-lowcode一款基于uniapp框架和uview组件库的低代码开发平台,项目提供可视化拖拽编辑器,采用MIT开源协议,适用于app.小程序等项目 ...
- 整理目前支持 Vue 3 的 UI 组件库 (2021 年)
最近,让前端圈子振奋的消息莫过于 Vue 3.0 的发布,一个无论是性能还是 API 设计都有了重大升级的新版本.距离 Vue 3.0 正式版发布已经有一段时间了,相信相关生态周边库也正在适配新版本中 ...
- 记:使用vue全家桶 + vux组件库 打包成 dcloud 5+ app 开发过程中遇到的问题
vue-cli 版本:2.9.6 webpack 版本:3.6.0 1. vue-cli 安装好之后,不是自动打开默认浏览器 在 config文件夹 ---> dev选项中,有个 autoO ...
- Vue——解决使用第三方组件库时无法修改默认样式的问题(使用 /deep/ )
最近在开发一个基于Vue的后台管理系统,其中使用了element-ui第三方ui组件库.使用过组件库的人都知道,第三方组件往往会有一些默认的样式,而有些又是我们想要改变的. 一.基础(了解 <s ...
- 从零搭建react+ts组件库(封装antd)
为什么会有这样一篇文章?因为网上的教程/示例只说了怎么做,没有系统详细的介绍引入这些依赖.为什么要这样配置,甚至有些文章还是错的!迫于技术洁癖,我希望更多的开发小伙伴能够真正的理解一个项目搭建各个方面 ...
随机推荐
- vnpy源码阅读学习(9)回到OptionMaster
回到OptionMaster 根据我们对APP调用的代码阅读,我们基本上知道了一个APP是如何被调用,那么我们回到OptionMaster学习下这个APP的实现. 看看结构 class OptionM ...
- jquery动态live绑定toggle事件
$(".btn").live("click",function(){ $(this).toggle( function () { //事件 1 console. ...
- jeecg ant design vue一级菜单跳到外部页面——例如跳到百度
需求:点击首页跳到百度新打开的页面 找到SideMenu.vue 对应的inde.js找到renderMenuItem 函数.加一个判断 if(menu.meta.url=='https://ww ...
- js事件冒泡于事件捕获
事件冒泡 事件捕获指的是从document到触发事件的那个节点,即自上而下的去触发事件. 事件冒泡是自下而上(从最深节点开始,向上传播事件)的触发事件 //例子 <div id="pa ...
- java中ThreadLocal的使用
文章目录 在Map中存储用户数据 在ThreadLocal中存储用户数据 java中ThreadLocal的使用 ThreadLocal主要用来为当前线程存储数据,这个数据只有当前线程可以访问. 在定 ...
- 如何在Vue项目中优雅的使用sass
开始之前,请先确保有一个基于webpack模板的项目(vue-cli脚手架一键安装~) 1.打开项目终端,安装sass的依赖包 npm install --save-dev sass-loader / ...
- 编程语言50年来的变化,我用50种编程语言告诉你“Hello world”怎么写!
当我们学习一门新的语言时,"Hello, World!"通常是我们所写的第一个程序. 因此,所有程序员在职业生涯中至少完成了"Hello, World!"程序员 ...
- 禅道部署(基于 Linux)
1. 查看 Linux 服务器是 32位 还是 64位 的 getconf LONG_BIT 2. 禅道开源版安装包下载 下载站点1:# wget http://sourceforge.net/pro ...
- 1秒内通关扫雷?他创造属于自己的世界记录!Python实现自动扫雷
五一劳动节假期,我们一起来玩扫雷吧.用Python+OpenCV实现了自动扫雷,突破世界记录,我们先来看一下效果吧. 中级 - 0.74秒 3BV/S=60.81 相信许多人很早就知道有扫雷这么一款经 ...
- 01 微信小程序入门
一. 小程序介绍 微信小程序是腾讯于2017年1月9日推出的一种不需要下载安装即可在微信平台上使用的应用,主要提供给企业.政府.媒体.其他组织或个人的开发者在微信平台上提供服务. 微信小程序和微信的原 ...