基于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开发一个组件库相关推荐

  1. npm 编译打包vue_从零到一教你基于vue开发一个组件库

    前言 Vue是一套用于构建用户界面的渐进式框架,目前有越来越多的开发者在学习和使用.在笔者写完 徐小夕:如何从0到1教你搭建前端团队的组件系统​zhuanlan.zhihu.com 之后很多朋友希望了 ...

  2. cli3解决 ie11语法错误 vue_从零到一教你基于vue开发一个组件库高性能前端架构解决方案...

    Vue是一套用于构建用户界面的渐进式框架,目前有越来越多的开发者在学习和使用.虽然笔者有近2年没有从事vue的开发了,但平时一直在关注vue的更新和发展,笔者一直认为技术团队的组件化之路重点在于基础架 ...

  3. 如何开发一个基于 Vue 的 ui 组件库

    如何开发一个基于 Vue 的 ui 组件库 开发模式 预览 demo 在开发一个 ui 组件库时,肯定需要一边预览 demo,一边修改代码. 常见的解决方案是像开发一般项目一样使用 webpack-d ...

  4. 基于Vue结合Vant组件库的仿电影APP

    Vue综合案例 Vue综合案例 一.项目概要 1.效果前瞻 2.开发流程 3.开发环境 二.初始化及必要知识点 1.初始化远程仓库 2.创建项目 3.路由规划 4.反向代理配置 5.网络请求封装 6. ...

  5. Vue 开发 UI 组件库

    Vue 开发 UI 组件库 前言 一.开发环境搭建 1.项目初始化 2.开发前准备 二.Vue 实现常用组件 1.button 组件 1.1 参数支持 1.2 事件支持 1.3 Button 组件 1 ...

  6. Vue 开发的组件库

    16款优秀的Vue UI组件库推荐 Vue 是一个轻巧.高性能.可组件化的MVVM库,API简洁明了,上手快.从Vue推出以来,得到众多Web开发者的认可. 在公司的Web前端项目开发中,多个项目采用 ...

  7. 基于Vue开发一个日历组件

    最近在做一个类似课程表的需求,需要自制一个日历来支持功能及展现,就顺便研究一下应该怎么开发日历组件. 更新 2.23修复了2026年2月份会渲染多一行的bug,谢谢@深蓝一人童鞋提出的bug,解决方案 ...

  8. vue 字典_【开源】基于Vue的前端组件库HeyUI

    说道vue组件库,目前主流的基本就是iview和element.今天又发现一个很不错的.HeyUI. 组件也很丰富,入门比较简单. 反正开源框架我们有不嫌多,多多益善啊.感兴趣的可以看看. 关于Hey ...

  9. 基于 Vue 开发一个 多人聊天室(万字长文) - 从 0 到 1 篇

    前言 在上个月初,接到一个需求,要开发一个 聊天通讯 模块 并且 集成到 项目中的多个 入口,实现业务数据的记录追踪. 接到需求后,还挺开心,这是我第一次 搞 通讯 类的需求,之前一直是 B 端 的业 ...

  10. 基于Vue和Element-ui组件库搭建的后台管理系统

    1. 电商管理后台 API 接口文档 说明 前端:https://gitee.com/Cola163/system 后台: https://gitee.com/Cola163/system-serve ...

最新文章

  1. https wireshark抓包——要解密出原始数据光有ssl 证书还不行,还要有浏览器内的pre-master-secret(内存里)...
  2. markdown 流程图js_科学网—让Markdown支持ASCII流程图和JavaScript流程图 - 李继存的博文...
  3. linux用date指令,Linux中date指令的使用
  4. 多线程中的互斥控制程序代码_Java中的并发——线程安全性
  5. 使用LogParser分析IIS网站日志
  6. [ZJOI2006]物流运输
  7. 用OpenCV检测图像中的长方形画布或纸张并提取图像内容
  8. 天联高级版服务器信息怎么查,天联高级版
  9. win搭建7java环境_WIN7java环境变量搭建方法
  10. android service开启前台通知
  11. Arm linux开发板移植OpenSSH
  12. 软件测试学习路线全面攻略,掌握这些技术轻松15K
  13. Unity3D 中动态更改材质球纹理
  14. 手写max,min,abs函数
  15. unity UGUI显示数字上标
  16. 必应输入法,搜狗输入法->当前日期快捷显示设置
  17. 用matlab实现循环卷积,利用matlab实现循环卷积.doc
  18. 【渝粤题库】陕西师范大学202051公共财政学作业(高起专)
  19. 4.M2Eclipse插件的安装使用
  20. ccf试题及答案java,ccf认证考试试题答案

热门文章

  1. 使用UOS微信桌面版协议登录,wechaty免费版web协议又可以用了
  2. HikariCP数据库连接池详解
  3. c# 标准正太分布函数_[C#] 查标准正态分布表
  4. 通过exe解决kindle for pc中文书籍无法修改字体的问题
  5. VS2003版本Jsoncpp的配置和使用
  6. [工作笔记之一] 转正答辩 2015-08-04 15:08
  7. 华为荣耀magic2手机系统更新鸿蒙,华为荣耀Magic2怎么禁止系统更新功能_如何关闭和禁用系统更新...
  8. MVVM框架原理浅析
  9. 聚类算法小结(1)——K均值聚类算法
  10. 项目——网络对战五子棋(Web-Gobang)