vite配置umd、esm、cjs、es报错(Invalid value for option "output.dir" ...)

项目背景

  • vue3 + ts + vite
  • 打包组件库

我想要生成/dist,/lib,/es三个目录,分别存放umd&esm、cjs和es模式的问题,然后使用vite.config配置,因为vite 的 build也是基于rollup打包的,所以这里可以配置rollup相关的配置

问题复现

先看我的配置:

ts 复制代码
build: {
      minify: false,
      rollupOptions: {
        output: [
          {
            format: 'es',
            entryFileNames: '[name].js',
            preserveModules: true,
            dir: 'es',
            exports: 'named',
            preserveModulesRoot: 'src'
          },
          {
            format: 'cjs',
            entryFileNames: '[name].js',
            preserveModules: true,
            dir: 'lib',
            exports: 'named',
            preserveModulesRoot: 'src'
          },
          {
            format: 'umd',
            name: 'infra-ui',
            file: 'lib/index.umd.js',
            globals: {
              vue: 'Vue',
              vant: 'vant'
            }
          },
          {
            format: 'esm',
            file: 'lib/index.esm.js',
            exports: undefined
          }
        ]
      }
    }

可以发现这是一个很常规的配置,所以我直接打包,就报了如下的错误

查了下说的是 umd 但入口配置file,es和cjs是多入口配置dir,但是看了自己的配置没问题,所以就直接郁闷了。于是一个一个排查发现rollupOptions.build的配置顺序有影响,于是我把umd和esm放到了前面,es和cjs放到后面,然后去掉file字段,发现就好了???

ts 复制代码
build: {
      minify: false,
      rollupOptions: {
        output: [
          {
            format: 'umd',
            name: 'infra-ui',
            globals: {
              vue: 'Vue',
              vant: 'vant'
            }
          },
          {
            format: 'esm',
            exports: undefined
          },
          {
            format: 'es',
            entryFileNames: '[name].js',
            preserveModules: true,
            dir: 'es',
            exports: 'named',
            preserveModulesRoot: 'src'
          },
          {
            format: 'cjs',
            entryFileNames: '[name].js',
            preserveModules: true,
            dir: 'lib',
            exports: 'named',
            preserveModulesRoot: 'src'
          }
        ]
      }
    }

谁懂啊,家人们,有知道的小伙伴可以在评论区告知一下,感谢! 其实直接使用rollup打包也需要分成两次来打,一次打全局的,一次打单个文件的也就是preserveModules这个字段配置,但是按照常理来说,打包应该是一次编译,多个格式输出,不懂为啥会和顺序有关。

相关推荐
天天鸭3 小时前
写个vite插件自动处理系统权限,降低99%重复工作
前端·javascript·vite
charlee442 天前
nginx部署发布Vite项目
nginx·性能优化·https·部署·vite
微风好飞行13 天前
Vite 打包 vscode 扩展遇到的模块问题
javascript·vscode·vite
风吹一夏v15 天前
webpack到vite的改造之路
webpack·vue·vite
EndingCoder16 天前
性能优化中的工程化实践:从 Vite 到 Webpack 的最佳配置方案
webpack·性能优化·vite·devops·工程化实践
19组清风16 天前
深入解析 Vite 代码分割原理:从依赖入口点算法到动态导入优化
前端·vite·rollup.js
whyfail16 天前
Vite 的“心脏移植”:Rolldown
前端·vite
Lsx_18 天前
Vite 环境变量配置
前端·javascript·vite
秋天的一阵风19 天前
Vite 的新改动:Rolldown-Vite 来袭🚀🚀🚀
前端·vue.js·vite
霸王蟹23 天前
前端项目Excel数据导出同时出现中英文表头错乱情况解决方案。
笔记·学习·typescript·excel·vue3·react·vite