请问一个第三方模块导出的问题,为什么选择了导出的是babel编译过后的commonjs模块的文件,而不是umd模块的文件

image.png
image.png

看第三方的模块"react-input-autosize"关于构建的结果和导出不是太明白;
dist 文件夹是 rollup 生成的 esm 和 umd 模块的文件,
lib 文件夹是 babel 生成的 commonjs 模块的文件,
请问为什么 package.json 文件之中的main字段声明的是babel 生成的 commonjs 模块的文件,到处 dist/react-input-autosize.js 这个 UMD module 文件不是应该更好一些么?

阅读 1.6k
1 个回答

首先 package.json 这玩意儿是给 Node.js 项目用的,node_modules 目录里的东西当然是需要你引入的。你既然都已经能 import XXX from 'XXX' 或者 require('XXX') 了,那要么就是在 Node.js 的 CommonJS 方案下、要么是在 ESModule 的 ESM 方案下(在 package.json 里对应 module 这个属性),压根就不可能是别的。

你见过谁在需要 Node.js 环境的项目里模块化用 AMD、CMD 和从 globalThis 上找全局挂载的?既然都不用它们,那 UMD 的优势在哪儿呢?UMD 存在的意义不就是为了整合所有这些模块化方案吗?

所以用 UMD 可以、但没必要。UMD 的输出一般都是放到 CDN 上供外链下载的,以适应任何项目类型的模块导入方案。

当然某些库也确实会把 UMD 输出作为入口,这点上看作者个人选择了。

推荐问题