基于vue开发一个组件库
基于vue开发一个组件库
如果团队存在多个不同的项目都会使用一致的组件设计规范,那么搭建组件库无疑是不二选择.接下来我们直接开始实现组件库的搭建.
1.首先安装vue-cli3并创建一个项目
// 创建项目
vue create tset
关于vue的组件库目录结构,首先我们看看原来的目录结构如下:
我们做一下调整:
将src重命名为examples, 并添加packages目录,用来存放我们的自定义组件. 但是cli默认会启动src下的服务,如果目录名变了,我们需要手动修改配置,vue-cli3中提供自定义打包配置项目的文件,我们只需要手动创建vue.config.js即可.我们具体修改如下:
module.exports = {lintOnSave: false,pages: {index: {entry: 'examples/main.js',template: 'public/index.html',filename: 'index.html'}},// 扩展 webpack 配置,使 packages 加入编译chainWebpack: config => {config.module.rule('js').include.add('/packages').end().use('babel').loader('babel-loader')}
}
首先修改入口文件地址为examples下的main.js,其次将packages加入打包编译任务中.
2.编写组件
拿一个Button组件来示范,这里只实现一个比较简单的组件。 首先我们先在packages目录下新建一个Button目录,然后src里的index.vue存放组件的源代码:
<template><div class="y-button"><slot></slot></div>
</template><script>
export default {name: 'y-button',props: {type: String}
}
</script><style scoped>.y-button {display: inline-block;padding: 4px 8px;background: #000;color: #fff;}
</style>
我们在在Button的index.js里编写如下代码来作为vue的组件安装:
// 导入组件,组件必须声明 name
import YButton from './src'// 为组件提供 install 安装方法,供按需引入
YButton.install = function (Vue) {Vue.component(YButton.name, YButton)
}// 导出组件
export default YButton
Button的组件结构如下
接下来我们在packages的入口文件index.js中导入组件并安装导出:
// 导入button组件
import YButton from './Button'// 组件列表
const components = [YButton
]// 定义 install 方法,接收 Vue 作为参数。如果使用 use 注册插件,那么所有的组件都会被注册
const install = function (Vue) {// 判断是否安装if (install.installed) return// 遍历注册全局组件components.map(component => Vue.component(component.name, component))
}// 判断是否是直接引入文件
if (typeof window !== 'undefined' && window.Vue) {install(window.Vue)
}export default {// 导出的对象必须具有 install,才能被 Vue.use() 方法安装install,// 以下是具体的组件列表YButton
}
这是vue组件注册的规则之一。详细文档大家可以看vue官网的组件篇。
3.测试代码
将组件导入到examples目录下的main.js中,其本质就是一个项目的开发目录,我们只需要按照如下方式导入即可:
// examples/main.js// 导入组件库
import yui from '../packages'
// // 注册组件库
Vue.use(yui)
这种方式是全局导入,至于按需导入,完全可以采用element的方式来配置,对于业务组件来说,一般项目中都是使用的到,所以全局导入比较合适,作为UI库来说,按需导入可能更适合。
接下来我们就可以在项目中使用我们的组件了:
效果如下:
4.配置package.json文件
作为一个组件库,我们必须按照npm的发包规则来编写我们的package.json, 我们先来解决组件库打包的问题,首先我们需要让脚手架编译我们的组件代码,并输出到指定目录下,我们按照发包规范一般会输出到lib目录下,修改script脚本,代码如下:
"scripts": {"serve": "vue-cli-service serve","build": "vue-cli-service build","lint": "vue-cli-service build --target lib --name yui --dest lib packages/index.js"},
我们的lib脚本就是用来打包packages的组件代码到lib目录下,文件名为以–name指定的名称前缀开头,我们执行脚本会输出类似如下代码:
5.发布到npm
// 本地编译组件库代码yarn lib
// 登录npm login// 发布npm publish// 如果发布失败提示权限问题,请执行以下命令npm publish --access public
发布之后效果如下:
之后我们就可以通过如下方式使用了:
import yui from 'ytestnpm/packages'
import 'ytestnpm/lib/yui.css'Vue.use(yui)
第一次注册发布到npm可能会出错403,可能是没有验证邮箱,如果验证邮箱了,那么可以看看package.json的name值,有可能是名称和仓库里重名了。
基于vue开发一个组件库相关推荐
- npm 编译打包vue_从零到一教你基于vue开发一个组件库
前言 Vue是一套用于构建用户界面的渐进式框架,目前有越来越多的开发者在学习和使用.在笔者写完 徐小夕:如何从0到1教你搭建前端团队的组件系统zhuanlan.zhihu.com 之后很多朋友希望了 ...
- cli3解决 ie11语法错误 vue_从零到一教你基于vue开发一个组件库高性能前端架构解决方案...
Vue是一套用于构建用户界面的渐进式框架,目前有越来越多的开发者在学习和使用.虽然笔者有近2年没有从事vue的开发了,但平时一直在关注vue的更新和发展,笔者一直认为技术团队的组件化之路重点在于基础架 ...
- 如何开发一个基于 Vue 的 ui 组件库
如何开发一个基于 Vue 的 ui 组件库 开发模式 预览 demo 在开发一个 ui 组件库时,肯定需要一边预览 demo,一边修改代码. 常见的解决方案是像开发一般项目一样使用 webpack-d ...
- 基于Vue结合Vant组件库的仿电影APP
Vue综合案例 Vue综合案例 一.项目概要 1.效果前瞻 2.开发流程 3.开发环境 二.初始化及必要知识点 1.初始化远程仓库 2.创建项目 3.路由规划 4.反向代理配置 5.网络请求封装 6. ...
- Vue 开发 UI 组件库
Vue 开发 UI 组件库 前言 一.开发环境搭建 1.项目初始化 2.开发前准备 二.Vue 实现常用组件 1.button 组件 1.1 参数支持 1.2 事件支持 1.3 Button 组件 1 ...
- Vue 开发的组件库
16款优秀的Vue UI组件库推荐 Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可. 在公司的Web前端项目开发中,多个项目采用 ...
- 基于Vue开发一个日历组件
最近在做一个类似课程表的需求,需要自制一个日历来支持功能及展现,就顺便研究一下应该怎么开发日历组件. 更新 2.23修复了2026年2月份会渲染多一行的bug,谢谢@深蓝一人童鞋提出的bug,解决方案 ...
- vue 字典_【开源】基于Vue的前端组件库HeyUI
说道vue组件库,目前主流的基本就是iview和element.今天又发现一个很不错的.HeyUI. 组件也很丰富,入门比较简单. 反正开源框架我们有不嫌多,多多益善啊.感兴趣的可以看看. 关于Hey ...
- 基于 Vue 开发一个 多人聊天室(万字长文) - 从 0 到 1 篇
前言 在上个月初,接到一个需求,要开发一个 聊天通讯 模块 并且 集成到 项目中的多个 入口,实现业务数据的记录追踪. 接到需求后,还挺开心,这是我第一次 搞 通讯 类的需求,之前一直是 B 端 的业 ...
- 基于Vue和Element-ui组件库搭建的后台管理系统
1. 电商管理后台 API 接口文档 说明 前端:https://gitee.com/Cola163/system 后台: https://gitee.com/Cola163/system-serve ...
最新文章
- https wireshark抓包——要解密出原始数据光有ssl 证书还不行,还要有浏览器内的pre-master-secret(内存里)...
- markdown 流程图js_科学网—让Markdown支持ASCII流程图和JavaScript流程图 - 李继存的博文...
- linux用date指令,Linux中date指令的使用
- 多线程中的互斥控制程序代码_Java中的并发——线程安全性
- 使用LogParser分析IIS网站日志
- [ZJOI2006]物流运输
- 用OpenCV检测图像中的长方形画布或纸张并提取图像内容
- 天联高级版服务器信息怎么查,天联高级版
- win搭建7java环境_WIN7java环境变量搭建方法
- android service开启前台通知
- Arm linux开发板移植OpenSSH
- 软件测试学习路线全面攻略,掌握这些技术轻松15K
- Unity3D 中动态更改材质球纹理
- 手写max,min,abs函数
- unity UGUI显示数字上标
- 必应输入法,搜狗输入法->当前日期快捷显示设置
- 用matlab实现循环卷积,利用matlab实现循环卷积.doc
- 【渝粤题库】陕西师范大学202051公共财政学作业(高起专)
- 4.M2Eclipse插件的安装使用
- ccf试题及答案java,ccf认证考试试题答案
热门文章
- 使用UOS微信桌面版协议登录,wechaty免费版web协议又可以用了
- HikariCP数据库连接池详解
- c# 标准正太分布函数_[C#] 查标准正态分布表
- 通过exe解决kindle for pc中文书籍无法修改字体的问题
- VS2003版本Jsoncpp的配置和使用
- [工作笔记之一] 转正答辩 2015-08-04 15:08
- 华为荣耀magic2手机系统更新鸿蒙,华为荣耀Magic2怎么禁止系统更新功能_如何关闭和禁用系统更新...
- MVVM框架原理浅析
- 聚类算法小结(1)——K均值聚类算法
- 项目——网络对战五子棋(Web-Gobang)