Vite库模式打包后入口文件路径不对怎么办?
我在用Vite的库模式打包组件库时遇到了问题,配置了build.lib.name为”my-lib”,但生成的dist文件夹里只有vendor.js,没有预期的main.js入口文件。查看构建日志没报错,这是为什么呢?
尝试在vite.config.js里这样配置:
export default defineConfig({
build: {
lib: {
entry: path.resolve(__dirname, 'src/index.js'),
name: 'MyLib',
fileName: (format) => <code>my-lib.${format}.js</code>
},
rollupOptions: {
external: ['vue'],
output: {
exports: 'auto',
globals: { vue: 'Vue' }
}
}
}
})
但打包后文件结构是这样的:
dist/
my-lib.es.js
my-lib.cjs.js
my-lib.umd.js
vendor.js
明明指定了entry路径,为什么没有生成对应的main.js?umd格式文件能否直接引入使用?
entry路径,但是fileName配置里用了my-lib.${format}.js这种动态生成文件名的方式,所以它会生成不同格式的文件,而不是一个固定的main.js。你如果就是要生成一个特定的
main.js文件,可以调整fileName的配置,去掉动态部分。不过通常情况下,我们不会固定为一个文件名,而是让 Vite 根据不同的输出格式生成相应的文件,这样更灵活。至于
umd格式的文件,是可以直接在浏览器里引入使用的,因为它已经把所有的依赖都打包进去了,只需要全局变量就能访问到你的库。如果你非要生成一个
main.js,可以试试下面这种配置方式:不过要注意的是,这样生成的
main.js可能不会包含所有的格式,你可能需要手动调整来满足不同的使用场景。如果项目里既有 Node.js 环境也有浏览器环境,建议还是保留动态文件名的方式。fileName配置来的,既然你写了my-lib.${format}.js,那自然不会有单独的main.js。最简单的办法是直接在package.json里指定入口文件,比如这样:至于
umd格式,是可以直接通过<script>标签引入使用的,记得配置好全局变量名MyLib就行了。别折腾太多,按这个改完基本就能用了。