vlambda博客
学习文章列表

Node.js 宣布正式支持 ECMAScript modules

在本月 21 日发布的 Node.js 13.2.0 版本中,正式取消了 --experimental-modules 启动参数。这意味着 Node.js 对 ES modules 的支持已经进入相对稳定阶段。那么ES modules 和 CommonJS modules 加载如何区分?这里简单翻译一下,如果有以下情况出现,会被识别为 ES modules 加载:


  1. 文件后缀名为 ".mjs"

  2. package.json 中 type 字段值为 "module"

  3. 启动参数添加 —-input-type=module


其他情况下,都会被识别为 CommonJS modules。


同样的,如果:

  1. 文件后缀名为 ".cjs"

  2. package.json 中 type 字段值为 "commonjs"

  3. 启动参数添加 —-input-type=commonjs


都会被默认识别为 CommonJS modules。


举个例子:

// 模块目录 package.json 中包含 "type": "module"
// aaa.js 会被识别为 ES modules 加载,因为// 当前 package.json 中存在 type=moduleimport './test/aaa.js'
// 这里取决于 test-aaa 的 package.json // 中是否有 type=module ,如有则会被识别为 ES modulesimport 'test-aaa';
// 原理同上取决于 test-aaa 的 package.json // 中是否有 type=module ,如有则会被识别为 ES modulesimport './node_modules/test-aaa/index.js';


实现逻辑目前官方文档的标记是 "Stability: 1",表示还在实验中,相信随着这次新版本的 Node.js 发布,在社区的共同努力下,很快就会进入 "Stability: 2" 正式稳定了。


如果想详细了解一下,请点击阅读原文看 Node.js 13.2.0 的 esm 文档。