Vite配置Library模式打包后导出的文件无法被其他项目引入怎么办?

Air-卫红 阅读 42

我在用Vite的Library模式打包一个工具库时遇到问题,按照文档配置了library选项,但打包生成的umd文件在另一个项目里引入时一直报错:Uncaught TypeError: Cannot read properties of undefined (reading 'myFunction')

具体操作是这样的:
修改了vite.config.js配置:


export default defineConfig({
  build: {
    lib: {
      entry: path.resolve(__dirname, 'src/index.js'),
      name: 'MyLib',
      formats: ['umd']
    },
    rollupOptions: {
      external: ['lodash']
    }
  }
})

然后用vite build生成了dist/mylib.umd.js,但在测试项目里这样引入:


import { myFunction } from '../dist/mylib.umd.js'

控制台提示找不到模块,换成script标签引入时又出现全局变量找不到方法的问题。尝试过在rollupOptions里添加输出dir配置,但好像没解决核心问题…

我来解答 赞 9 收藏
二维码
手机扫码查看
2 条解答
A. 毓珂
A. 毓珂 Lv1
遇到这个问题,主要是因为在UMD格式下,模块的引入方式和ESM或CJS不同。当你使用 import { myFunction } from '../dist/mylib.umd.js' 这种语法时,实际上是按照ESM的方式去加载模块,而UMD模块并不直接支持这种方式。

你需要确保在引入UMD格式的库时,使用正确的全局变量名。在你的Vite配置中,name: 'MyLib' 设置了UMD全局变量名为 MyLib,所以在HTML文件中,你应该通过