现在后端应该转用esm还是继续保持commonjs?
发布于 3 年前 作者 takayama-lily 7145 次浏览 来自 问答

发布package的话又用哪种比较好?

6 回复

可以同时发布 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.

回到顶部