发布package的话又用哪种比较好?
可以同时发布 ESM + cjs 。 用 ESM 编写然后用 rollup 打包成 cjs
不得不承认,现在这块确实很纠结。
可以看下官方这个讨论,没吵出个所以然:https://github.com/nodejs/node/issues/33954
如果只考虑node环境使用可以只导出commonjs, 如果支持浏览器环境可以同时导出commonjs和esm,并添加module字段指定导出的esm入口 参考 https://github.com/rollup/rollup/wiki/pkg.module https://nodejs.org/dist/latest-v16.x/docs/api/packages.html#packages_dual_commonjs_es_module_packages
如果只能选一个
一般来说,前端无所谓,因为都会打包,哪个都行
后端的话,commonjs 好一点,因为很多老的且非常常用的包都是 commonjs,所以后端不可能不支持 commonjs
ExperimentalWarning: The ESM module loader is experimental. ExperimentalWarning: Conditional exports is an experimental feature. This feature could change at any time
这就象fireofx的扩展从xul 转成webExt一样,只会让firefox 越来越小众 茴香豆有4种写法,写起来没有任何难度,问题的关键是换个写法再写一遍谁来发钱?
这个问题如果有什么可以讨论的地方的话,就是 TSC 和 Node 在制定和落实标准的位置上太划水了,提示不应该是下面这样吗:
DeprecatedWarning: The CJS is deprecated, use the the stable ESM module instead or use environment variable IGNORE_CJS_WARNING
to suppress this warning.