使用 CJS 和 ESM 模块是否存在任何兼容性问题?
Are there any compatiblity issues with using CJS and ESM modules?
我最近阅读了几篇“NodeJS 中的 ESM” 文章,因此;我决定将我拥有的 CJS 模块转换为 ES-Module (2020)。在我开始编写代码之前,我注意到了一些令人难以抗拒的事情——尽管这并非完全出乎意料——我的页面是一个红色的大波浪 error。我发现重写整个模块更容易,尽管我花了几天时间。
所以现在我不禁想知道是否需要 ESM。更简单地说:如果我今天不开始使用 ESM 模块,我是否会 运行 陷入可比性问题,或者我可以继续使用 CJS?
所有新项目都应该写成 ESM 模块,因为这是 Javascript 语言和 nodejs 的现在和未来。 CJS 模块在很长一段时间内失去支持的可能性很小,因为 nodejs 生态系统的很大一部分仍然是 CJS 模块,我很怀疑 nodejs 领导层是否想要创造这种情况 Python做了 2.0 => 3.0,这在开发者社区中并不令人愉快。另外,nodejs 中的双重兼容性已经存在,现在并没有真正损害任何东西。
有一些像 __dirname
这样的 CJS 便利性在 EJS 中并不方便。而且,EJS 需要静态导出声明(它们不能像在 CJS 中那样计算),这对打包器来说是个好消息,但排除了一些你可能会进行动态导出的情况。
ESM 是Javascript中的模块标准。 Nodejs 正在努力完全支持该标准。新代码应编写为 ESM 模块。我希望将来的一些新功能只能在 ESM 模块中使用,因为那是开发和创新发生的地方。
CJS 是特定于节点的,而不是 Javascript 标准。 nodejs 背后的开发人员从现有的第 3 方模块系统中汲取灵感,塑造它们以适应 nodejs 的需求,并将它们构建到 nodejs 的第一个版本中。它们不是 Javascript 标准。 ESM 现在是 Javascript 标准的一部分,nodejs 一直在采用该新标准,并在他们需要的比标准提供更多的地方填充一些位。
我最近阅读了几篇“NodeJS 中的 ESM” 文章,因此;我决定将我拥有的 CJS 模块转换为 ES-Module (2020)。在我开始编写代码之前,我注意到了一些令人难以抗拒的事情——尽管这并非完全出乎意料——我的页面是一个红色的大波浪 error。我发现重写整个模块更容易,尽管我花了几天时间。
所以现在我不禁想知道是否需要 ESM。更简单地说:如果我今天不开始使用 ESM 模块,我是否会 运行 陷入可比性问题,或者我可以继续使用 CJS?
所有新项目都应该写成 ESM 模块,因为这是 Javascript 语言和 nodejs 的现在和未来。 CJS 模块在很长一段时间内失去支持的可能性很小,因为 nodejs 生态系统的很大一部分仍然是 CJS 模块,我很怀疑 nodejs 领导层是否想要创造这种情况 Python做了 2.0 => 3.0,这在开发者社区中并不令人愉快。另外,nodejs 中的双重兼容性已经存在,现在并没有真正损害任何东西。
有一些像 __dirname
这样的 CJS 便利性在 EJS 中并不方便。而且,EJS 需要静态导出声明(它们不能像在 CJS 中那样计算),这对打包器来说是个好消息,但排除了一些你可能会进行动态导出的情况。
ESM 是Javascript中的模块标准。 Nodejs 正在努力完全支持该标准。新代码应编写为 ESM 模块。我希望将来的一些新功能只能在 ESM 模块中使用,因为那是开发和创新发生的地方。
CJS 是特定于节点的,而不是 Javascript 标准。 nodejs 背后的开发人员从现有的第 3 方模块系统中汲取灵感,塑造它们以适应 nodejs 的需求,并将它们构建到 nodejs 的第一个版本中。它们不是 Javascript 标准。 ESM 现在是 Javascript 标准的一部分,nodejs 一直在采用该新标准,并在他们需要的比标准提供更多的地方填充一些位。