打包配置
vite 专门提供了库模式的打包方式,配置其实非常简单,首先全局安装 vite 以及@vitejs/plugin-vue
js
pnpm add vite @vitejs/plugin-vue -D -w
在components下新建vite.config.ts。我们需要让打包后的结构和我们开发的结构一致,如下配置我们将打包后的文件放入dlx-ui 目录下,因为后续发布组件库的名字就是 dlx-ui,当然这个命名大家可以随意.具体代码在下方
然后在 components/package.json 添加打包命令scripts
js
"scripts": {
"build": "vite build"
},
声明文件
到这里其实打包的组件库只能给 js 项目使用,在 ts 项目下运行会出现一些错误,而且使用的时候还会失去代码提示功能,这样的话我们就失去了用 ts 开发组件库的意义了。所以我们需要在打包的库里加入声明文件(.d.ts)。
全局安装vite-plugin-dts
js
pnpm add vite-plugin-dts -D -w
在vite.config.ts中引入,完整的配置文件如下:
js
// components/vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import dts from 'vite-plugin-dts'
export default defineConfig({
plugins: [
vue(),
dts({
entryRoot: './src',
outDir: ['../dlx-ui/es/src', '../dlx-ui/lib/src'],
//指定使用的tsconfig.json为我们整个项目根目录下,如果不配置,你也可以在components下新建tsconfig.json
tsconfigPath: '../../tsconfig.json',
}),
],
build: {
//打包文件目录
outDir: 'es',
emptyOutDir: true,
//压缩
//minify: false,
rollupOptions: {
//忽略打包vue文件
external: ['vue'],
input: ['index.ts'],
output: [
{
//打包格式
format: 'es',
//打包后文件名
entryFileNames: '[name].mjs',
//让打包目录和我们目录对应
preserveModules: true,
exports: 'named',
//配置打包根目录
dir: '../dlx-ui/es',
},
{
//打包格式
format: 'cjs',
//打包后文件名
entryFileNames: '[name].js',
//让打包目录和我们目录对应
preserveModules: true,
exports: 'named',
//配置打包根目录
dir: '../dlx-ui/lib',
},
],
},
lib: {
entry: './index.ts',
},
},
})
执行pnpm run build打包,出现了我们需要的声明的文件

可以看到打包时打包了2种模式,一种是es模式,一种是cjs模式,当用户引入组件库时使用哪种呢?我们可以修改/components/package.json的代码:
- main : 指向
lib/index.js,这是 CommonJS 模块的入口文件。Node.js 环境和不支持 ES 模块的工具会使用这个文件。 - module : 指向
es/index.mjs,这是 ES 模块的入口文件。现代前端工具(如 Vite)会优先使用这个文件。
js
"main": "lib/index.js", // CommonJS 入口文件
"module": "es/index.mjs", // ES 模块入口文件
但是此时的所有样式文件还是会统一打包到 style.css 中,还是不能进行样式的按需加载,所以接下来我们将让 vite 不打包样式文件,样式文件后续单独进行打包。后面我们要做的则是让样式文件也支持按需引入,敬请期待。