首页 > 其他分享 >TS4+Vite+Vitest+Vitepress Vue3.3 自主打造媲美ElementPlus的组件库

TS4+Vite+Vitest+Vitepress Vue3.3 自主打造媲美ElementPlus的组件库

时间:2024-09-03 16:02:53浏览次数:9  
标签:ElementPlus dist Vitest component js Vue3.3 vue 组件 import

TS4+Vite+Vitest+Vitepress Vue3.3 自主打造媲美ElementPlus的组件库
这个问题看起来是想要创建一个类似 Element Plus 的 Vue 组件库,并且使用 TypeScript、Vite、Vitest 和 Vitepress 进行开发。以下是一个简化的指南,用于创建一个自己的 Vue 组件库项目框架。

安装必要的工具:

npm init vite@latest my-vue-library --template vue-ts
cd my-vue-library
npm install

安装依赖项:

npm install -D vitest vitepress
npm install element-plus

配置 vite.config.ts 以支持组件库开发:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

export default defineConfig({
plugins: [vue()],
optimizeDeps: {
include: ['element-plus/dist/index.es.js']
}
})

创建组件库的入口文件,例如 src/index.ts:

import { App } from 'vue'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'

const components = [
// ...列出你的组件
]

const install = (app: App) => {
components.forEach((component) => {
app.component(component.name, component)
})

// 安装 ElementPlus 图标
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component)
}
}

export {
install,
// ...导出你的组件
}

创建组件库的样式文件,例如 src/style/index.scss:

@import 'element-plus/dist/index.css';

/* 你的组件库特有样式 */

配置 vite.config.ts 以支持组件库文档:

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { resolve } from 'path'

export default defineConfig({
plugins: [vue()],
optimizeDeps: {
include: ['element-plus/dist/index.es.js']
},
build: {
rollupOptions: {
input: {
docs: resolve(__dirname, 'docs/main.js'),
// ...其他入口
}
}
}
})

创建组件库文档的入口文件,例如 docs/main.js:

import { createApp } from 'vue'
import App from './App.vue'
import './style.css'

createApp(App).mount('#app')

创建组件库文档的入口组件,例如 docs/App.vue:

创建 test 目录用于单元测试,并添加测试文件。

添加 package.json 配置,指定入口和出口文件:

{
"name": "my-vue-library",
"version": "1.0.0",
"main": "dist/my-vue-library.cjs.js",
"module": "dist/my-vue-library.esm.js",
"unpkg": "dist/my-vue-library.global.js",
"scripts": {
"dev": "vite",
"build": "vue-tsc --noEmit && v

标签:ElementPlus,dist,Vitest,component,js,Vue3.3,vue,组件,import
From: https://www.cnblogs.com/web1123/p/18394797

相关文章

  • Vue3+TypeScript+Vite+Pinia+ElementPlus开发项目在线医疗服务平台
     前言随着vue3.0的越来越受欢迎,开始有许多公司和个人开始学习并使用vue3开发项目。我从接触学习并使用vue2,到现在的vue3,工作中也一直在使用vue。vue3也发布很长时间了,目前vue3+vite+ts再结合一些优秀的UI框架,如Elementplus,Antdesign,NaiveUI,移动端的VantUI,成为了较为流......
  • 第七章 项目布局实现(7.4.5)——ElementPlus 自定义命名空间
    7.4.5ElementPlus自定义命名空间参考:https://cn.element-plus.org/zh-CN/guide/namespace.htmlElementPlus提供的默认命名空间为el。在特殊情况下,我们需要自定义命名空间。我们使用sass书写样式,必须同时设置ElConfigProvider和scss$namespace。设置ElC......
  • 自动引用elementplus组件
    1、Vue项目中安装ElementPlus#NPM$npminstallelement-plus--save#Yarn$yarnaddelement-plus#pnpm$pnpminstallelement-plus2、组件按需引入配置Vant按需引入---安装:unplugin-vue-components 插件unplugin-vue-components 插件可以在Vue文件中自......
  • 基于Vue2+ElementUI/Vue3+ElementPlus对el-notification增加倒计时进度条特效,鼠标移入
    遇到一个需求就是对这个el-notification加一个倒计时进度条,方便用户知道该通知何时自动关闭。一、示例代码(1)基于Vue2+ElementUI的项目<template><div><el-button@click="showTip">doit</el-button></div></template><script>exportdefault{......
  • Vue3+elementplus遇到的常见问题
    1.跳转同一个路由的时候,只是参数不一样页面不刷新,不会执行onMounted尝试多种方案,包括watch等最终解决方案:router-view设置key属性为路由的完整路径<keep-alive><router-view:key="$route.fullPath"></router-view></keep-alive>eg:左侧菜单是接口返回的  默......
  • ElementPlusError: [ElOnlyChild] no valid child node found
    1.在使用elementplus表格操作按钮,使用v-if,作用元素,出现如下报错:ElementPlusError:[ElOnlyChild]novalidchildnodefound代码如下:<el-table-columnlabel="操作"align="center"fixed="right"width="150"class-name="small-paddingf......
  • elementplus图片预览操作按钮栏增加下载
    1.实现效果:elementplus图片预览组件,自定义增加一个下载按钮,以及下载功能,如图 2.使用的vue3和element plus版本"element-plus":"2.7.6",3.具体代码:(1)使用#viewer插槽:<el-image:title="点击预览":src="getBowserUrl(scope.row.filePath)":z......
  • 【组件开发】基于elementplus组件开发的audio音频播放器
    1<template>2<divclass="my-audio">3<!--音频播放器,使用timeupdate事件更新播放进度-->4<audio@timeupdate="updateProgress"controlsref="audioRef">5<source:src="audioUrl&quo......
  • Vue3+Elementplus 递归菜单展示
    这里只是做个笔记,js,css那些都没写子组件MenuItem<template><templatev-if="item.children"><el-sub-menu:index="item.value"><template#title>{{item.label}}</template><MenuItemv-for="childI......
  • 自研electron31+vue3+elementPlus桌面聊天Exe应用-源码版
    Vue3-ElectronWechat:基于最新前端跨平台技术electron31.x整合高性能构建工具vite.js5搭建的一款高颜值桌面端仿微信界面聊天程序。整个项目采用vue3setup语法糖编码开发,全新封装electron多窗口管理模式。基于vite5+electron31+vue3仿微信客户端聊天【源码版】功能特......