仿 ElementUI 搭建自己的 vue 组件库

仿 ElementUI 搭建自己的 vue 组件库

  • [一、创建 my-ui-can 项目](#一、创建 my-ui-can 项目)
    • [1. 新建项目](#1. 新建项目)
    • [2. 自定义组件](#2. 自定义组件)
    • [3. 创建 MyButton 组件](#3. 创建 MyButton 组件)
    • [4. 导出组件](#4. 导出组件)
    • [5. package.json](#5. package.json)
  • [二、发布到 npm 仓库](#二、发布到 npm 仓库)
    • [1. npm 账号注册(忽略)](#1. npm 账号注册(忽略))
    • [2. 发布 my-ui-can](#2. 发布 my-ui-can)
  • [二、项目引用 my-ui-can 依赖包](#二、项目引用 my-ui-can 依赖包)

功能描述:仿 ElementUI 组件库的方式创建 一个 my-ui-can 的组件库(简单版,支持按需加载,只有 MyButton 组件)。

一、创建 my-ui-can 项目

1. 新建项目

shell 复制代码
vue create my-ui-can

2. 自定义组件

项目目录如下:

my-ui-can/

├── dist/

├── lib/

│ ├── button/

│ │ ├── src/

│ │ │ └── button.vue

│ │ └── index.js

│ └── index.js

│── package.json

└── vue.config.js

3. 创建 MyButton 组件

vue 复制代码
<!-- button.vue -->
<template>
  <button
    class="my-button"
    @click="handleClick"
    :disabled="disabled"
    :autofocus="autofocus"
    :type="nativeType"
  >
    <span v-if="$slots.default"><slot></slot></span>
  </button>
</template>
<script>
  export default {
    name: 'MyButton',
    inject: {
    },
    props: {
      size: String,
      nativeType: {
        type: String,
        default: 'button'
      },
      loading: Boolean,
      disabled: Boolean,
      autofocus: Boolean
    },
    methods: {
      handleClick(evt) {
        this.$emit('click', evt);
      }
    }
  };
</script>
js 复制代码
// lib/button/index.js
import MyButton from './src/button';

/* istanbul ignore next */
MyButton.install = function(Vue) {
  Vue.component(MyButton.name, MyButton);
};

export default MyButton;

4. 导出组件

js 复制代码
// my-ui-can/lib/index.js
import Button from './button/index.js';

const components = [
  Button
];

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

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

export default {
  version: '0.1.0',
  install,
  Button
};

5. package.json

json 复制代码
{
  ....
  "name": "my-ui-can",
  "version": "0.1.0",
  "main": "lib/index.js",
  ...
}

二、发布到 npm 仓库

1. npm 账号注册(忽略)

不知道怎么操作的,可以参考 npm 账户注册

2. 发布 my-ui-can

shell 复制代码
npm config set registry https://registry.npmjs.org/
npm login
npm pulish

二、项目引用 my-ui-can 依赖包

npm install my-ui-can

方式一:全局引入

js 复制代码
// main.js
import MyUI from 'my-ui-can'
Vue.use(MyUI)

方式二:局部引入

vue 复制代码
<template>
  <MyButton>222</MyButton>
</template>
<script>
import MyButton from 'my-ui-can/lib/button'
export default {
  name: 'App',
  components: {
    MyButton
  }
}
</script>
相关推荐
Jiaberrr几秒前
小程序setData性能优化指南:避开坑点,让页面丝滑如飞
前端·javascript·vue.js·性能优化·小程序
m0_694845571 分钟前
HandBrake 是什么?视频转码工具使用与服务器部署教程
服务器·前端·pdf·开源·github·音视频
方安乐3 分钟前
react笔记之tanstack
前端·笔记·react.js
学嵌入式的小杨同学8 小时前
从零打造 Linux 终端 MP3 播放器!用 C 语言实现音乐自由
linux·c语言·开发语言·前端·vscode·ci/cd·vim
weixin_425543739 小时前
TRAE CN3.3.25 构建的Electron简易DEMO应用
前端·typescript·electron·vite·nestjs
Mr Xu_10 小时前
【Vue3 + ECharts 实战】正确使用 showLoading、resize 与 dispose 避免内存泄漏
前端·信息可视化·vue·echarts
0思必得010 小时前
[Web自动化] Selenium设置相关执行文件路径
前端·爬虫·python·selenium·自动化
雯0609~10 小时前
hiprint:实现项目部署与打印1-官网提供普通html版本
前端·html
不绝19111 小时前
UGUI——进阶篇
前端
~牧马~11 小时前
【记录63】electron打包vue项目之踩坑
vue.js·electron·electron与node兼容