Vite打包库时为什么第三方依赖会被包含进输出文件?
我用Vite的Library模式打包一个React组件库,但发现打包后的文件包含了react-i18next的代码,明明在vite.config里设置了external排除。试过调整optimizeDeps配置也没用,这是怎么回事?
// vite.config.js
export default defineConfig({
build: {
lib: {
entry: 'src/index.js',
name: 'MyLib',
fileName: (format) => <code>mylib.${format}.js</code>
},
rollupOptions: {
external: ['react', 'react-i18next'],
output: {
globals: {
react: 'React',
'react-i18next': 'i18next'
}
}
}
}
})
组件里这样导入:import { useTranslation } from 'react-i18next',但打包后的umd文件里还是能看到i18next的完整代码块,导致体积暴涨。控制台报错说模块重复定义
另外确认下babel是不是把import转成了require,这也会导致rollup的tree-shaking失效。
react-i18next从optimizeDeps.include里排除掉,Vite 默认会把依赖打进包里,除非明确告诉它别这么做。懒人方案是直接加个配置:搞定,记得清理下缓存再打包,省得老代码捣乱。