仿 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>
相关推荐
腻害兔1 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
不好听6132 小时前
从一行 JSX 到屏幕像素:前端开发者必须懂的浏览器渲染管线
前端
恒拓高科WorkPlus2 小时前
企业级内网即时通讯建设模型:BeeWorks内网IM四层架构
前端
前端小李子3 小时前
前端环境变量裸奔?我用 EnvShield 给它穿了件防弹衣
前端
youtootech3 小时前
HarmonyOS《柚兔学伴》项目实战25-我的页面、Web 嵌入与项目总结
前端·华为·harmonyos
小林ixn3 小时前
从零到一理解 React 父子组件通信:手写一个 Todo 应用带你彻底搞懂单向数据流
前端·javascript·react.js
醇氧4 小时前
CountDownLatch / CyclicBarrier / Semaphore 面试高频问答清单
前端·面试·职场和发展
qetfw6 小时前
MXU:Tauri 2 + React 的 MaaFramework 跨平台 GUI 源码
前端·python·react.js·前端框架·开源项目·效率工具
甲维斯6 小时前
我要开始吹牛逼了!Kimi K3 “宇宙无敌”!
前端·人工智能