ES6模块与CommonJS模块的差异
-
CommonJS 模块输出的是一个值得拷贝,ES6 模块输出的是值得引用
-
CommonJS 模块是运行时加载,ES6 模块是编译时输出接口
CommonJS 加载的是一个对象(即
module.exports
属性),该对象只有在脚本运行完才会生成。而 ES6 模块不是对象,它的对外接口只是一个静态定义,在代码静态解析阶段就会生出 -
CommonJS 模块的
require()
是同步加载模块,ES6 模块的import
命令是异步加载,有一个独立的模块依赖的解析阶段
Node.js 的模块加载方法
.mjs
文件总是以 ES6 模块加载,.cjs
文件总是以 CommonJS 模块加载,.js
文件的加载取决于 package.json
里面 type
字段的设置