vue自定义组件库

6 篇文章 0 订阅
5 篇文章 0 订阅

现在vue的UI框架已经很丰富了,为什么还要封装一套自己的UI框架呢?

vue的UI框架已经有很多(ElementUIiView 等等),而且组件都很丰富,大体上可以满足我们的需求,不用重复造轮子,但是需求是不定的,在项目中有时候仅凭这些也实现不了,这时我们需要封装自己的组件或者对一些已经存在的组件进行二次封装。

接下来我们就来看看如何自定义自己的组件并使用
一:创建项目
# 创建目录
mkdir tanrj-ui
# cd到目录中
cd tanri-ui
# 初始化项目
vue create .

如下图为项目结构

在这里插入图片描述

二:调整项目目录
|-- 重命名src为examples(参考ElementUI),用于测试组件
|-- 新建packages,定义上传的组件库
|-- 新建vue.config.js

调整之后的项目结构

在这里插入图片描述

编写vue.config.js

const path = require('path')
const { config } = require('process')

const resolve = dir => path.join(__dirname, dir)

module.exports = {
  pages: {
    index: {
      entry: 'examples/main.js',
      template: 'public/index.html',
      filename: 'index.html'
    }
  },

  chainWebpack: config => {
    config.module
    .rule('js')
    .include
      .add(resolve('packages'))
      .end()
    .use('babel')
      .loader('babel-loader')
      .tap(option => {
        return option
      })
  }
}
三:定义组件

在packages下新建组件(如图)
在这里插入图片描述
文件路径:tanrj-ui\packages\date-picker\src\date-picker.vue

<template>
  <div>这是一个datePicker组件</div>
</template>

<script>
export default {
  name: 'datePicker',
};
</script>

<style lang="scss">

</style>

文件路径:tanrj-ui\packages\date-picker\index.js

import datePicker from './src/date-picker.vue'

datePicker.install = function(Vue) {
  Vue.component(datePicker.name, datePicker)
}

export default datePicker
  • theme-color组件同上
四:注册组件
import datePicker from './date-picker/index'
import themeColor from './theme-color/index'

const components = [
  datePicker,
  themeColor
]

const install = function(Vue) {
  components.forEach(component => {
    Vue.component(component.name, component)
  })
}

if(typeof window !== 'undefined' && window.Vue) {
  install(window.Vue)
}

export {
  install,
  datePicker,
  themeColor
}
五:本地测试

我们可以在main.js中全局注册,也可以在页面中直接引入
文件路径:tanrj-ui\examples\main.js

import Vue from 'vue'
import App from './App.vue'

import { datePicker, themeColor } from '../packages/index'

Vue.use(datePicker)
Vue.use(themeColor)
// 或者
// Vue.component(datePicker.name, datePicker)
// Vue.component(themeColor.name, themeColor)

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

接着在页面中使用上即可
文件路径:tanrj-ui\examples\App.vue

<template>
  <div id="app">
    <datePicker/>
    <themeColor/>
  </div>
</template>

<script>

export default {
  name: 'App'
}
</script>

<style>

</style>

运行看效果:
在这里插入图片描述

六:打包文件

本地测试没问题之后,接着就是上传到npm中
在package.json文件中脚本添加

"script": {
    "build-lib": "vue-cli-service build --target lib --name tanrj-ui --dest lib packages/index.js",
}

执行命令

npm run build-lib

注意:每次定义好组件或添加了新的组件之后都需要上传

此时我们看看项目结构

在这里插入图片描述

七:发布到npm
  • 修改packages.json中配置
"private": false,
"main": "lib/tanrj-ui.umd.min.js",
// 可自行决定是否修改
"version": "0.1.3",
"keywords": ["tanrj", "tanrj-ui"],
  • 根目录下添加.npmignore文件
# 忽略目录
examples/
packages/
public/

# 忽略指定文件
vue.config.js
babel.config.js
*.map
  • 发布npm
# 设置为默认的官方镜像
npm config set registry https://registry.npmjs.org/
# 登录(未注册去npm.js.com或者通过npm adduser注册一个账户)
npm login
# 发布
npm publish

之后我们便可在npm官方网站看到

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值