Node中CJS与ESM模块规范有哪些显著差异?
- 内容介绍
- 文章标签
- 相关推荐
本文共计3450个文字,预计阅读时间需要14分钟。
自 13.2.0 版本开始,Nodejs 在保留了 CommonJS(CJS)语法的前提下,新增了对 ES Modules(ESM)语法的支持。
天下苦 CJS 久已,Node 逐渐拥抱新标准的规划当然值得称赞,我们也会展望未来 Node 不再需要借助工具,就能打破两种模块化语法的壁垒……
但实际上,一切没有想象中的那么美好。
一、并不完美的 ESM 支持
1.1 在 Node 中使用 ESM
Node 默认只支持 CJS 语法,这意味着你书写了一个 ESM 语法的 js 文件,将无法被执行。
如果想在 Node 中使用 ESM 语法,有两种可行方式:
- ⑴ 在
package.json中新增"type": "module"配置项。 - ⑵ 将希望使用 ESM 的文件改为
.mjs后缀。
对于第一种方式,Node 会将和 package.json 文件同路径下的模块,全部当作 ESM 来解析。
第二种方式不需要修改 package.json,Node 会自动地把全部 xxx.mjs 文件都作为 ESM 来解析。
本文共计3450个文字,预计阅读时间需要14分钟。
自 13.2.0 版本开始,Nodejs 在保留了 CommonJS(CJS)语法的前提下,新增了对 ES Modules(ESM)语法的支持。
天下苦 CJS 久已,Node 逐渐拥抱新标准的规划当然值得称赞,我们也会展望未来 Node 不再需要借助工具,就能打破两种模块化语法的壁垒……
但实际上,一切没有想象中的那么美好。
一、并不完美的 ESM 支持
1.1 在 Node 中使用 ESM
Node 默认只支持 CJS 语法,这意味着你书写了一个 ESM 语法的 js 文件,将无法被执行。
如果想在 Node 中使用 ESM 语法,有两种可行方式:
- ⑴ 在
package.json中新增"type": "module"配置项。 - ⑵ 将希望使用 ESM 的文件改为
.mjs后缀。
对于第一种方式,Node 会将和 package.json 文件同路径下的模块,全部当作 ESM 来解析。
第二种方式不需要修改 package.json,Node 会自动地把全部 xxx.mjs 文件都作为 ESM 来解析。

