CNode

现在后端应该转用esm还是继续保持commonjs?

问答
Ttakayama-lily发布于5 年前最后回复5 年前8 回复8481 浏览0 收藏

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

查看回复

回复 (6)

W
waitingsong#1·5 年前

可以同时发布 ESM + cjs 。 用 ESM 编写然后用 rollup 打包成 cjs

A
atian25#2·5 年前

不得不承认,现在这块确实很纠结。

可以看下官方这个讨论,没吵出个所以然:https://github.com/nodejs/node/issues/33954

C
chenkai0520#3·5 年前

如果只考虑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

D
daGaiGuanYu#4·5 年前

如果只能选一个
一般来说,前端无所谓,因为都会打包,哪个都行
后端的话,commonjs 好一点,因为很多老的且非常常用的包都是 commonjs,所以后端不可能不支持 commonjs

Y
yakczh#5·5 年前

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种写法,写起来没有任何难度,问题的关键是换个写法再写一遍谁来发钱?

H
hsiaosiyuan0#6·5 年前

这个问题如果有什么可以讨论的地方的话,就是 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.

参与回复
登录后即可参与回复。登录