【脚手架创建 Vue3 公共组件库】

脚手架创建 Vue3 公共组件库

创建一个支持 Vue2 和 Vue3 的公共组件库需要配置多版本兼容的脚手架,并通过分包构建实现按需加载。以下是具体实现方法:


初始化项目结构

使用 Vue CLI 或 Vite 初始化项目,目录结构需区分 Vue2 和 Vue3 版本:

复制代码
my-component-lib/
├── packages/          # 多版本组件目录
│   ├── vue2/          # Vue2 组件
│   │   ├── src/
│   │   └── package.json
│   └── vue3/          # Vue3 组件
│       ├── src/
│       └── package.json
├── build/             # 构建配置
├── node_modules/
└── package.json

配置多版本构建

1. 修改根目录 package.json

json 复制代码
{
  "scripts": {
    "build:vue2": "cd packages/vue2 && npm run build",
    "build:vue3": "cd packages/vue3 && npm run build",
    "build": "npm run build:vue2 && npm run build:vue3"
  }
}

2. Vue2 组件配置(packages/vue2/package.json

json 复制代码
{
  "name": "@my-lib/vue2",
  "version": "1.0.0",
  "main": "dist/index.js",
  "module": "dist/index.esm.js",
  "peerDependencies": {
    "vue": "^2.6.0"
  }
}

3. Vue3 组件配置(packages/vue3/package.json

json 复制代码
{
  "name": "@my-lib/vue3",
  "version": "1.0.0",
  "main": "dist/index.js",
  "module": "dist/index.esm.js",
  "peerDependencies": {
    "vue": "^3.0.0"
  }
}

实现组件兼容性

Vue2 组件示例(packages/vue2/src/Button.vue

vue 复制代码
<template>
  <button class="vue2-btn">{{ text }}</button>
</template>

<script>
export default {
  props: ['text']
}
</script>

Vue3 组件示例(packages/vue3/src/Button.vue

vue 复制代码
<template>
  <button class="vue3-btn">{{ text }}</button>
</template>

<script setup>
defineProps(['text'])
</script>

配置 Rollup/Vite 打包

Vue2 的 vite.config.js

javascript 复制代码
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue2'

export default defineConfig({
  plugins: [vue()],
  build: {
    lib: {
      entry: 'src/index.js',
      name: 'MyLibVue2',
      fileName: 'index'
    },
    rollupOptions: {
      external: ['vue']
    }
  }
})

Vue3 的 vite.config.js

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

export default defineConfig({
  plugins: [vue()],
  build: {
    lib: {
      entry: 'src/index.js',
      name: 'MyLibVue3',
      fileName: 'index'
    },
    rollupOptions: {
      external: ['vue']
    }
  }
})

发布到 npm

  1. 登录 npm 账户:
bash 复制代码
npm login
  1. 分别进入子目录发布:
bash 复制代码
cd packages/vue2 && npm publish --access public
cd ../vue3 && npm publish --access public

使用组件库

Vue2 项目安装:

bash 复制代码
npm install @my-lib/vue2

Vue3 项目安装:

bash 复制代码
npm install @my-lib/vue3

全局注册示例(Vue3):

javascript 复制代码
import { createApp } from 'vue'
import MyLib from '@my-lib/vue3'

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

注意事项

  • 通过 peerDependencies 声明 Vue 版本依赖,避免重复打包
  • 构建时需分离 CSS 文件以便按需加载
  • 推荐使用 unplugin-vue-components 实现自动按需导入
  • 版本更新时需同步修改两个子包的版本号
相关推荐
一 乐5 小时前
婚纱摄影网站|基于ssm + vue婚纱摄影网站系统(源码+数据库+文档)
前端·javascript·数据库·vue.js·spring boot·后端
C_心欲无痕5 小时前
ts - tsconfig.json配置讲解
linux·前端·ubuntu·typescript·json
清沫5 小时前
Claude Skills:Agent 能力扩展的新范式
前端·ai编程
yinuo6 小时前
前端跨页面通信终极指南:方案拆解、对比分析
前端
yinuo6 小时前
前端跨页面通讯终极指南⑨:IndexedDB 用法全解析
前端
xkxnq7 小时前
第二阶段:Vue 组件化开发(第 16天)
前端·javascript·vue.js
烛阴7 小时前
拒绝配置地狱!5 分钟搭建 Three.js + Parcel 完美开发环境
前端·webgl·three.js
xkxnq7 小时前
第一阶段:Vue 基础入门(第 15天)
前端·javascript·vue.js
anyup9 小时前
2026第一站:分享我在高德大赛现场学到的技术、产品与心得
前端·架构·harmonyos
BBBBBAAAAAi9 小时前
Claude Code安装记录
开发语言·前端·javascript