【发布时间】:2021-06-24 11:35:30
【问题描述】:
我最近阅读了几篇“NodeJS 中的 ESM” 文章,因此;我决定将我拥有的 CJS 模块转换为 ES-Module (2020)。甚至在我开始编写代码之前,我就注意到了一些令人不知所措的事情——尽管这并不完全出乎意料——我的页面是一个大红色波浪形错误。我发现重写整个模块更容易,尽管我花了几天时间。
所以现在我不禁想知道 ESM 是否必要。更简单地说:如果我今天不开始使用 ESM 模块,我是否会遇到可比性问题,还是可以继续使用 CJS?
【问题讨论】:
-
我很难说出这个问题。我正在尝试确定我几天前开始的模块是否值得,因为 ES-Module 是值得的。我不得不放弃一些小但值得注意的事情。我确实喜欢 Import 导出语句,但我不禁觉得将模块开发为通用 JavaScript 模块或 ES 模块可能有更重要的原因,兼容性和支持是我最关心的问题。
-
所有新项目都应该写成 ESM 模块,因为这是语言和 nodejs 的现在和未来。 CJS 模块在很长一段时间内失去支持的可能性极低,因为 nodejs 生态系统的很大一部分仍然是 CJS 模块,我相当怀疑 nodejs 领导层是否想要创造 Python 在 2.0 中所做的那种情况 = > 3.0 这在开发者社区中并不令人愉快。另外,nodejs 中的双重兼容性已经存在,现在并没有真正伤害任何东西。
-
有一些 CJS 便利,如
__dirname,在 EJS 中不那么便利。而且,EJS 需要静态导出声明(不能像在 CJS 中那样计算它们),这对打包器来说是个好消息,但排除了一些可能进行动态导出的情况。 -
@jfriend00 是的,这是我考虑不切换的重要原因之一。我知道 __dirname 有一个解决方法,但我真的很喜欢 __dirname 原样,没有添加逻辑或路径格式。这是一件小事,但却是极其根本的。在这一点上,我有种感觉,如果 CJS 模块不在逐步淘汰的计划中,并且它们将与一切和谐地工作,我还不如坚持下去。我的意思是为什么要改变?
-
@jfriend00 哦,好吧,我倒读了你的 cmets。所以推进计划是让 ESM 成为标准?
标签: javascript node.js node-modules es6-modules