Vue3.3 + TS4,自主打造媲美 ElementPlus 的组件库(无秘分享)

1. 项目初始化

首先,我们需要创建一个基于 Vite 的 Vue 3 + TypeScript 项目。 bash

perl 复制代码
perl
代码解读
复制代码
npm init vite@latest my-component-library -- --template vue-ts cd my-component-library

2. 项目结构搭建

Vue3.3 + TS4 ,自主打造媲美 ElementPlus 的组件库(完结)_超星it

为了更好地组织代码,我们可以按照以下结构来搭建项目: plaintext

css 复制代码
css
代码解读
复制代码
my-component-library/ ├── src/ │   ├── components/  # 组件目录 │   │   ├── Button/  # 示例组件 │   │   │   ├── Button.vue │   │   │   ├── index.ts │   ├── index.ts     # 组件库入口文件 ├── vite.config.ts   # Vite 配置文件 ├── package.json     # 项目依赖和脚本配置

3. 配置 Vite

vite.config.ts 中进行一些基本的配置,例如别名配置和构建配置: typescript

javascript 复制代码
javascript
代码解读
复制代码
import { defineConfig } from 'vite'; import vue from '@vitejs/plugin-vue'; import path from 'path'; export default defineConfig({   plugins: [vue()],   resolve: {     alias: {       '@': path.resolve(__dirname, 'src'),     },   },   build: {     lib: {       entry: path.resolve(__dirname, 'src/index.ts'),       name: 'MyComponentLibrary',       fileName: (format) => `my-component-library.${format}.js`,     },     rollupOptions: {       external: ['vue'],       output: {         globals: {           vue: 'Vue',         },       },     },   }, });

4. 创建组件

以创建一个简单的按钮组件为例:

src/components/Button/Button.vue

vue

xml 复制代码
xml
代码解读
复制代码
<template>   <button :class="['my-button', { 'my-button--primary': type === 'primary' }]" @click="handleClick">     <slot></slot>   </button> </template> <script setup> import { defineProps, defineEmits } from 'vue'; const props = defineProps<{   type?: 'primary' | 'default'; }>(); const emits = defineEmits(['click']); const handleClick = () => {   emits('click'); }; </script> <style scoped> .my-button {   padding: 8px 16px;   border: none;   cursor: pointer; } .my-button--primary {   background-color: #007bff;   color: white; } </style>

src/components/Button/index.ts

typescript

css 复制代码
css
代码解读
复制代码
import { App } from 'vue'; import Button from './Button.vue'; // 定义 install 方法,用于 Vue.use() 安装组件 Button.install = (app: App) => {   app.component('MyButton', Button); }; export default Button;

5. 组件库入口文件

src/index.ts 中导出所有组件: typescript

javascript 复制代码
javascript
代码解读
复制代码
import { App } from 'vue'; import Button from './components/Button'; const components = [Button]; const install = (app: App) => {   components.forEach((component) => {     app.use(component);   }); }; export { Button }; export default {   install, };

6. 开发环境测试

src/App.vue 中测试组件: vue

xml 复制代码
xml
代码解读
复制代码
<template>   <div>     <MyButton @click="handleClick">点击我</MyButton>     <MyButton type="primary" @click="handleClick">主要按钮</MyButton>   </div> </template> <script setup> const handleClick = () => {   console.log('按钮被点击了'); }; </script>

7. 构建和发布

运行以下命令进行构建: bash

arduino 复制代码
arduino
代码解读
复制代码
npm run build

构建完成后,会在 dist 目录下生成组件库的文件。你可以将其发布到 npm 上供他人使用。

8. 文档和测试

  • 文档:使用工具如 VitePress 或 Storybook 来为组件库生成文档,方便用户了解组件的使用方法和属性。
  • 测试:使用 Vitest 或 Jest 等测试框架对组件进行单元测试,确保组件的稳定性和可靠性。

通过以上步骤,你就可以使用 Vue 3.3 和 TypeScript 4 自主打造一个简单的组件库。你可以根据需求不断添加更多的组件,并进行优化和扩展。

相关推荐
counterxing1 小时前
我整理了一个免费开发资源目录,还做成了 CLI 和 MCP
前端·agent·ai编程
子兮曰8 小时前
Bun v1.3.14 深度解析:Image API、HTTP/3、全局虚拟存储与五十项变革
前端·后端·bun
kyriewen9 小时前
今天,百年巨头一次砍了9200人,而一个离职科学家的实话让全网睡不着觉
前端·openai·ai编程
问心无愧05139 小时前
ctf show web 入门42
android·前端·android studio
kyriewen10 小时前
老板逼我上AI,我偷偷在浏览器里跑LLaMA,省下20万API费
前端·react.js·llm
Beginner x_u10 小时前
前端八股整理(手写 02)|数组转树、数组扁平化、随机打乱一个数组
前端·数组·数组转树·数组扁平化
KaMeidebaby10 小时前
卡梅德生物技术快报|禽类成纤维细胞 FISH 实验:鸟类性别染色体基因定位技术实现与数据验证
前端·数据库·其他·百度·新浪微博
天若有情67310 小时前
前端高阶性能优化:跳出传统懒加载与预加载,基于用户行为做轻量预判加载
前端·性能优化
小小小小宇10 小时前
前端转后端:SQL 是什么
前端
张元清11 小时前
React Observer Hooks:7 种监听 DOM 而不写样板代码的方式
前端·javascript·面试