vite打包vue组件库

前言

本文讲的不是一步步搭建项目,然后如何规划好项目结构,文件夹命名等等,而是从一个整体中剥离出组件库。
首先我们的项目不是一开始就规划好了之后如何打包,都是一步步趟坑趟过来的,所以一开始的时候,我们是直接clone vue3的模板,然后就开搞了,中间我们还加了i18n、tailwind、多终端样式等等各种玩意,所以整个项目的components,views,api等等就都在一起,这是本文跟那些其他教程不一样的地方,然后,就是目前任务,拆分项目打包vue组件库

开始工作

建立组件库文件夹
  1. 建立两个文件夹,分别命名为core和view
  2. 将项目文件一股脑全部复制到两个文件夹,后面我们再慢慢将里面不属于当前目类的文件删掉就行
    在这里插入图片描述
  3. core文件夹下建立vite.lib.config.ts,与原vite.config.ts区别开,内容可参考其他人的教程,我这里是直接复制的vite.config.ts,然后将一些不能用的删掉,加上出口文件夹,入口文件夹,rollupoption等等
// 添加出口文件夹 lib(不需要手动创建,会自动生成)
const outDir = resolve(__dirname, '../view/lib')
 import WindiCSS from 'rollup-plugin-windicss'
…
plugins: [
      Vue(),
      VueJsx(),
      ...WindiCSS(),
]
 build: {
      lib: {
        entry: pathResolve('src/install.ts'),
        // 组件库名字
        name: 'my-components-base',
        fileName: 'my-components-base', //fileName: (format) => `tmes.${format}.js`,
        // 输出格式
        formats: ['es']
      },
      outDir,
      emptyOutDir: true,
      rollupOptions: {
        // 确保外部化处理那些你不想打包进库的依赖
        external: [
          'vue',
          'element-plus',
          '@element-plus/icons-vue',
          'lodash',
          'lodash-es',
          'vue-i18n',
          'vue3-i18n',
          'vue-router',
          'pinia',
          'pinia-plugin-persist',
          'mitt',
          'vue-types',
          'qs',
          'axios',
          'jquery',
          '@vueuse/core',
          'vue-types',
          'vuedraggable',
           //下面这些需要反向引用view中的文件,没做到全部解耦
          '@/config/axios',
          '@/config/axios/config',
 
          '@/utils/routerHelper',
 
          '@/store/modules/app',
          '@/store/modules/dict',
          '@/store/modules/locale',
          '@/store/modules/permission',
          '@/store/modules/singleton',
          '@/store/modules/tagsView',
 
          '@/hooks/web/useI18n', //i18n
          '@/hooks/web/useCache',
          '@/hooks/web/useLocale',
          '@/hooks/web/useAxios',
 
          '@/router'
        ],
        output: {
          // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
          globals: {
            vue: 'Vue',
            jquery: '$',
            'element-plus': 'ElementPlus'
          }
        }
      }
    }	 

我们没做到完全解耦,后面可能还会再弄一个资源,api,util等子模块
4. 建立install.ts,这个文件的路径与vite.lib.config.ts中入口文件的路径一致

//引入windicss
import 'virtual:windi.css'
// 加载 src/components 下全部 vue 文件
// const components = import.meta.globEager('./**/*.vue')
 
import { Icon } from './components/Icon/index'
import SvgIcon from './components/SvgIcon/index.vue'
import { Backtop } from './components/Backtop'
import { Breadcrumb } from './components/Breadcrumb'
import { Highlight } from './components/Highlight'
 
export {
  Icon,
  SvgIcon,
  Backtop,
  Highlight
}

前面尽量挑几个组件,其内部引用不多的,先尝试打包,不报错,且给view使用不报错的,再考虑打包更多
5. 修改package.json文件,在scripts中添加一行命令

 "scripts": {
    "lib": "vite build --config vite.lib.config.ts"
  },
  1. 运行npm lib打包,如果哪些文件中报什么引用错误的,先在vite.lib.config.ts的 rollupOptions.external 中加上这个引用,这样,这些引用在打包时跳过,而会在view引用lib时指向view目录下对应文件
  2. lib包的引用,因为我们在步骤3处,将导出文件夹指向view/lib文件夹,所以我们在view项目中文件中引用打包的js文件
    在这里插入图片描述

在main.ts中引入上style.css

//引入组件样式
import '@/../lib/style.css'
  1. 如果发现组件不显示,可能是组件中用到了element-plus组件,需要按需引入一下
    在这里插入图片描述

9.如果发现样式出现问题,一般是组件style中未使用scoped,或者drawer、dialog等使用了相同的 custom-class
在这里插入图片描述

10.组件增加要打包的组件,删除view项目components

结尾彩蛋

到此vite打包就算是结束了,但使用中会发现,component进行修改或调试时要频繁npm lib,痛苦指数飙升,所以我们下一节讲如何搭建pnpm-workspace环境

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vite 4 是一个快速的构建工具,可以用于开发 Vue 3 组件。以下是一个基本的打包配置示例: ```js // vite.config.js import vue from '@vitejs/plugin-vue' export default { plugins: [vue()], build: { lib: { entry: 'src/main.js', // 组件的入口文件 name: 'MyComponent', // 组件的名称 fileName: format => `my-component.${format}.js` // 打包后文件的名称 }, rollupOptions: { // external 外部依赖的声明 external: ['vue'], output: { // globals 全局变量的声明 globals: { vue: 'Vue' } } } } } ``` 上面的配置将会把 Vue 组件打包成一个 UMD 格式的 JavaScript 文件,可以通过 script 标签引入,也可以通过 import 引入。其中,`lib.entry` 指定了组件的入口文件,`lib.name` 指定了组件的名称,`lib.fileName` 指定了打包后文件的名称。 在 `build.rollupOptions` 中,`external` 指定了组件的外部依赖,这里只有一个 Vue;`globals` 指定了组件的全局变量声明,这里将 Vue 指定为全局变量。 需要注意的是,如果组件中使用了一些 Vue 的插件或者第三方,需要在 `build.rollupOptions.external` 中声明这些依赖。如果不声明会导致打包后的文件中包含这些依赖的代码,从而增加文件体积。 除了上面的基本配置,还可以根据具体项目的需求进行更高级的配置,例如压缩文件体积、生成 source map 等。具体的配置项可以参考 Vite 的文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值