[ vue3.2+TS+Vite超全组件库配置教程(从头教起2) | 青训营笔记]

153 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 十 天

本文的搭建的组件库含有vue3.2最新语法糖+TS+Vite+Eslint+prettier+husky+vitest+@vue/test-utils

一、项目目录

承接上一篇,这是最终我们需要的组件文件目录,先大概介绍一下。playground文件夹是我们拿来测试组件的(就是用直接使用组件的方式来测试),并不是单测。package文件夹呢是拿来装我们开发的组件。

捕获.JPG

二、开始配置

先把src文件夹改成playground,然后将index.html里面的对入口文件的路径修改一下,然后可以将下面的X-UI改成自己组件库想要的名字

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <link rel="icon" href="/favicon.ico">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>X-UI</title>//可以改成自己想要的名字
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/playground/main.ts"></script>//修改此处
  </body>
</html>

再创建一个package文件夹,文件目录如下,该步骤主要创建了放置所有组件的components文件夹,和标准组件文件夹结构(此处拿button组件举例)

捕获.JPG

三、配置组件库导出架构

1.在button文件夹的src文件夹下创建一个button.vue

vue3.2的组件命名(下方button案例的name):使用 vite 插件 vite-plugin-vue-setup-extend 安装

npm i vite-plugin-vue-setup-extend -D

配置 vite.config.ts

import { defineConfig } from 'vite'
import VueSetupExtend from 'vite-plugin-vue-setup-extend'
export default defineConfig({
  plugins: [ VueSetupExtend() ]
})
<template>
  <div>Button组件</div>
</template>

<script setup lang="ts" name:"xButton">//可自己取名
import { ref, reactive, toRefs, onMounted} from 'vue'

</script>
<style scoped lang="scss">
</style>

2.在button组件里创建index.ts,作为组件导出文件,内容如下:

import { App } from "vue";

import Button from "./src/button.vue";
Button.install = function (app: App) {
  // 组件注册,按需引入
  app.component(Button.name, Button);
  return app;
};

export default Button;

3.分别在package文件夹下创建两个文件,component.tsindex.ts,用来做统一的组件管理和组件库整体的导出,其中注意文件路径就好。

//component.ts
import Button from "./components/button";
export default [Button];
export { Button };
//index.ts
import { App } from "vue";
import components from "./component";
// 所有组件
export * from "./component";

// 完整引入组件
const install = function (app: App) {
  components.forEach((component) => {
    app.use(component as unknown as { install: () => any });
  });
};

export default {
  install,
};

4.修改一下main.ts,导入你的组件库(XUI可以改成你自己想要的名名字):

import { createApp } from "vue";
import App from "./App.vue";
import XUI from "../package/index";
import "./assets/main.css";

createApp(App).use(XUI).mount("#app");