2019年3月29日目前,Node 对 ES6 Module 的支持又有新进展。一个新的 PR 更新了当前 --experimental-modules
的实现方案。
type 动态判断模块加载模式
更新后的方案将根据 package.json
文件中指定的 type 值来判断 js 文件是使用 ESM 还是 commonjs
- 如果 type 的值为 module 那么 js 文件将被作为 ESM 加载
- 如果 type 的值为 commonjs 那么 js 文件将被作为 commonjs 来加载
.mjs
这种与传统 js 扩展名不同的写法使用 flag 指定入口文件模块加载模式
更新后的方案允许开发者使用
--entry-type=type
的方式来指定入口文件的解析方式,判断行为与 package.json
的 type 一致支持新的扩展名 .cjs
新的扩展名
.cjs
表示在 module 模式的加载环境下去使用 commonjs 来加载扩展名为 .cjs
的模块模块加载方式有所改变
新的 flag:
--es-module-specifier-resolution=[type]
的默认值是 explicit
,和可选值 node
,在默认值的情况下引入模块时必须书写扩展名。This implies that ./x will only ever import exactly the sibling file "x" without appending paths or extensions. "x" is never resolved to x.mjs or x/index.mjs (or the .js equivalents).在 ESM 模式下加载 json 文件
比方说这里加载./x
模块,那么默认情况下只会加载名为x
的模块,而不是去尝试加载x.mjs
或x/index.mjs
提案在此:github.com/GeoffreyBoo…
--experimental-json-loader
flag 能够在 ESM 模式下加载 JSON 文件。导入的 json 文件将提供的 json 文件中的内容转化为一个对象或数组。就好像直接通过 JSON 模块 parse 了一样。
main 根据 type 的值确认入口文件加载模式
在
package.json
文件中的 main 字段指定入口文件,根据 type 字段来指定是 commonjs 还是 ESM 模式来加载。参考:
- github.com/nodejs/node…
- github.com/GeoffreyBoo…
请关注我的订阅号,不定期推送有关 JS 的技术文章,只谈技术不谈八卦 ?
【Node 引入 ESM 新方案】转载于:https://juejin.im/post/5c9de140f265da30bd3e3f8f
推荐阅读
- 接口|axios接口报错-参数类型错误解决
- 表单数据高级搜索功能设计
- 通过ve模板实现一键在线视频制作
- 原生js遍历json对象,获取key,value值
- python|使用Typescript接口进行运行时JSON类型检查
- ExtJS|Ext.Data.Store中将两个字段合并为一个字段
- Json转换利器Gson之-实际开发中的特殊需求处理(手动解析-TypeToken处理)
- 嵌入式|DIY物联网应用 3-控制继电器
- 嵌入式|单片机常用数据接口和总线和协议
- PHP|PHP接收POST数据,解析json数据