Bootstrap

Vue开发组件库

Vue开发组件库

1、创建项目

npm install -g @vue/cli
vue create 项目名

针对于vue脚手架生成的项目需要做出一些调整

  • 将src重命名为examples(防止第三方开发者产生的歧义)

  • 添加examples同级目录packages(用来存放我们的自定义组件)

  • 修改vue.config.js配置(修改入口文件为examples下的main.js,并将packages加入打包编译任务中)

    module.exports = {
      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')
      }
    }
    

项目目录结构如下

在这里插入图片描述

2、创建&编写组件

  • 在packages下创建组件,这里创建Button

  • Button文件夹下创建src(组件放置位置)

  • Button文件夹下创建index.js(组件的注册)

    import Button from './src'
    
    // 为组件提供 install 安装方法,供按需引入
    Button.install = function (Vue) {
      Vue.component(Button.name, Button)
    }
    
    // 导出组件
    export default Button
    
  • src下创建index.vue

    <template>
      <div class="button">
        <slot></slot>
      </div>
    </template>
    
    <script>
    export default {
      name: 'Button',
      props: {
        type: String
      }
    }
    </script>
    
    <style scoped>
    .button {
      width: 100px;
      border: 1px solid #000;
      padding: .5rem;
      margin: 0 auto;
    }
    
    .button:hover {
      color: aliceblue;
      background-color: #000000;
    }
    </style>
    
    

组件目录结构如下

在这里插入图片描述

3、组件统一注册

examples下新建index.js

// 导入button组件
import Button from './Button'

// 组件列表
const components = [
  Button
]

// 定义 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,
  // 以下是具体的组件列表
  Button
}

4、测试组件

在main.js中添加组件库并使用

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
// 导入组件库
import myui from '../packages'

createApp(App).use(myui).use(store).use(router).mount('#app')

在app.vue中使用

<template>
  <nav>
    <router-link to="/">Home</router-link>
    |
    <router-link to="/about">About</router-link>
  </nav>
  <router-view/>
  <Button>button</Button>
</template>

<script>

</script>
<style lang="scss">
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}

nav {
  padding: 30px;

  a {
    font-weight: bold;
    color: #2c3e50;

    &.router-link-exact-active {
      color: #42b983;
    }
  }
}
</style>

5、发布到npm

添加打包packages脚本

"scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build",
    "lib": "vue-cli-service build --target lib --name xui --dest lib packages/index.js"
}

构建

npm run lib

.npmignore

examples/
node_modules/
packages/
public/

.browserslistrc
.editorconfig
lint-staged.config.js
package-lock.json
plan.md

上传(更多转至https://blog.csdn.net/gyfghh/article/details/129212980)

npm publish
;