仿 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>
相关推荐
齐 飞几秒前
VUE2常用语法总结
javascript·vue.js
恋猫de小郭6 分钟前
Flutter 可以更直接地调用原生 API 了,Dart Direct Native Interop
android·前端·flutter
Data analyse45611 分钟前
web-vitals库接入:LCP、INP、CLS上报与阈值
前端·javascript·数据分析
北城笑笑13 分钟前
Vue 106 ,上篇:前端桌面端应用实现方案( Electron 框架详细介绍,Vue + Electron )
前端·javascript·vue.js·python·electron
柳杉32 分钟前
别再手抠特效帧了:一个能"看图改图"的像素特效库 + Claude Code Skill
前端·javascript
xixingzhe21 小时前
本地桌面客户端入门开发
前端
不磕了还不行1 小时前
用 Vue + Element UI 把元宝搜索的返回值做成“能点开检查的证据卡片”
前端·vue.js·ui
Csvn10 小时前
WASM
前端
修己xj11 小时前
我用 AI 给自己写了一个 Markdown 编辑器,然后把它开源了
前端