Vue 组件库从创建到发布全流程

创建项目

使用以下命令创建项目目录并初始化 package.json

bash 复制代码
mkdir my-vue-crud-lib
cd my-vue-crud-lib
npm init -y

目录结构建议

复制代码
my-vue-crud-lib/
├─ package.json
├─ tsconfig.json
├─ vite.config.ts
├─ src/
│  ├─ index.ts
│  ├─ components/
│  │   └─ DynamicCrudForm.vue
│  └─ types/
│      └─ index.d.ts
└─ README.md

注意事项

  • index.ts 必须导出组件
  • components 存放所有 Vue 组件
  • 使用 TypeScript 时需创建类型声明文件

安装依赖

安装核心依赖:

bash 复制代码
npm install vue@3 element-plus

安装开发依赖:

bash 复制代码
npm install -D vite @vitejs/plugin-vue vue-tsc typescript vite-plugin-dts

注意事项

  • Vue 和 ElementPlus 应声明为 peerDependencies
  • 开发依赖包含构建工具和类型相关插件

配置 TypeScript

tsconfig.json 配置示例:

json 复制代码
{
  "compilerOptions": {
    "target": "ESNext",
    "module": "ESNext",
    "moduleResolution": "Node",
    "strict": true,
    "declaration": true,
    "declarationDir": "dist/types",
    "skipLibCheck": true
  },
  "include": ["src"],
  "exclude": ["node_modules"]
}

关键配置项

  • declaration: true 生成类型声明文件
  • skipLibCheck: true 避免第三方库类型冲突

编写组件

组件入口文件示例:

ts 复制代码
// src/index.ts
import DynamicCrudForm from './components/DynamicCrudForm.vue';

export { DynamicCrudForm };
export default { DynamicCrudForm };

组件开发规范

  • 使用 <script setup lang="ts"> 语法
  • 通过 defineEmits 声明事件
  • 使用 Composition API 组织逻辑

配置 Vite 打包

vite.config.ts 配置示例:

ts 复制代码
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import dts from 'vite-plugin-dts';

export default defineConfig({
  plugins: [vue(), dts()],
  build: {
    lib: {
      entry: 'src/index.ts',
      name: 'MyVueCrudLib',
      formats: ['es', 'umd']
    },
    rollupOptions: {
      external: ['vue'],
      output: {
        globals: { vue: 'Vue' }
      }
    }
  }
});

关键配置

  • external 排除外部依赖
  • vite-plugin-dts 自动生成类型声明
  • 输出 ESM 和 UMD 格式

构建与发布

构建命令:

bash 复制代码
npm run build

发布流程:

  1. 更新 package.json 版本号
  2. 登录 npm 账户:
bash 复制代码
npm login
  1. 发布包:
bash 复制代码
npm publish --access public

发布注意事项

  • 确保 mainmodule 字段指向正确文件
  • 版本号遵循 semver 规范
  • 首次发布需使用 --access public

使用组件库

安装依赖:

bash 复制代码
npm install my-vue-crud-lib element-plus

全局注册:

ts 复制代码
import { createApp } from 'vue';
import MyVueCrudLib from 'my-vue-crud-lib';

createApp(App).use(MyVueCrudLib).mount('#app');

使用建议

  • 推荐按需导入组件
  • 注意 peerDependencies 版本匹配
  • 提供完整的类型提示

常见问题处理

类型声明缺失

  • 检查 vite-plugin-dts 是否正常工作
  • 手动添加类型声明文件

样式未生效

  • 确认已导入 ElementPlus 样式
  • 检查组件库的样式加载顺序

版本冲突

  • 保持 Vue 版本一致
  • 使用 peerDependencies 声明兼容版本
相关推荐
莫问ABC几秒前
HTML、CSS、JavaScript 前端三件套
前端·css·html
执子念的飞鱼1 分钟前
70MB Excel 浏览器预览失败:定位 XLSX 重复解压与内存峰值
javascript·性能优化
颜进强2 分钟前
07 - OpenSpec change 修正带与照单施工:update 修订 + apply 实现
前端·后端·ai编程
京东云开发者12 分钟前
【全栈实践】第一个 AI Agent 项目:从零搭建 AI 音频创作助手【最终版】
前端·vue.js·音视频开发
12.=0.25 分钟前
【REVIEW_C】【持续更新】
服务器·前端·javascript
Vuji25 分钟前
Pi 插件解剖|todo.ts:297 行,拼出工具+命令+状态的完整插件
前端·agent
明月_清风29 分钟前
开发者写PPT自救指南:4类对接场景,把技术讲清楚
前端·后端·面试
探索前端30 分钟前
3dtiles加载时被地形遮挡问题研究及处理思路
前端·3d·cesium
Htr_37 分钟前
Vercel 使用指南:框架、工作流与基础设施一体化的现代 Web 部署平台
前端
一颗烂土豆1 小时前
ECharts 太平面?试试这款 Vue 3D 图表库
前端·vue.js·echarts