本文参考自Module 的加载实现,例子代码大家可以查看。
- CommonJS用于服务器,ES6浏览器和服务器通用。
- 语法上面,CommonJS 模块使用
require()
和module.exports
,ES6 模块使用import
和export
。 - CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用。
- CommonJS 模块是运行时加载,ES6 模块是编译时输出接口。
- CommonJS 模块的
require()
是同步加载模块,ES6 模块的import
命令是异步加载,有一个独立的模块依赖的解析阶段。 - ES6 模块之中,顶层的
this
指向undefined
;CommonJS 模块的顶层this
指向当前模块。 - 处理“循环加载”的方法不一样,返回的结果也不一样。(CommonJS一旦出现某个模块被"循环加载",就只输出已经执行的部分,还未执行的部分不会输出。ES6 模块是动态引用,如果使用
import
从一个模块加载变量,那些变量不会被缓存,而是成为一个指向被加载模块的引用,需要开发者自己保证,真正取值的时候能够取到值。)