乐趣区

关于vite:Vite打包组件库

动机

去年应用 vue3 + TSX 封装组件,后果卡在了打包上,直到最近发现,vite 提供了 tsx 的打包插件。

组件筹备

手把手创立 Vue3 组件库

packages/index.ts 中引入相干的组件、工具库、款式。

Vite 配置

// bin/build.js
// node 包,commonjs 标准
const path = require('path')
const {defineConfig, build} = require('vite')
const vue = require('@vitejs/plugin-vue') 
const vueJsx = require('@vitejs/plugin-vue-jsx')

// 打包的入口文件
const entryDir = path.resolve(__dirname, '../packages')
// 进口文件夹
const outDir = path.resolve(__dirname, '../lib')
// vite 根底配置
const baseConfig = defineConfig({
  configFile: false,
  publicDir: false,
  plugins: [vue(), vueJsx()]
})
// rollup 配置
const rollupOptions = {
  // 确保内部化解决那些你不想打包进库的依赖
  external: ['vue'],
  output: {
    // 在 UMD 构建模式下为这些内部化的依赖提供一个全局变量
    global: [vue: 'Vue']
  }
}
// 全量打包构建
const buildAll = async () => {
  await build({
    ...baseConfig,
    build: {
      rollupOptions,
      lib: {entry: path.resolve(entryDir, 'index.ts'),
        name: '', // umd 的变量名
        fileName: (format) => `index.${format}.js`, // 输入文件名
        formats: ['es', 'umd'],
      },
      outDir
    }
  })
}
const build = async () => {await buildAll()
}
build()

pkg#scripts

"scripts": {"build:lib": "node ./bin/build.js"}

申明组件模块

避免 typescript 中引入 module 报错

// packages/vue.d.ts
declare module '*.vue' {import { DefineComponent} from 'vue'
  const component: DefineComponent<{}, {}, any>
  export default component
}
退出移动版