动态和静态

CommonJS是动态的,它是在代码运行时才可以确认依赖关系,因为它的文件导入路径是可以使用表达式动态指定的。

ES6 Module是静态的,他的导出导入是声明式的,在代码编译时就会确认代码的依赖关系。

值拷贝和动态映射

CommonJS中导入的值是对导出值的一份拷贝,导入者可以对它进行修改,而且导出者对值的运行时修改不会体现到导入者中。

ES6 Module使用动态映射的模块机制,更加类似于引用。而且不允许对引入的值进行修改。

循环依赖

CommonJS无法应对循环依赖的场景

ES6 Module动态映射的特性使其可以更好地支持循环依赖,只是需要由开发者来保证当导入的值被使用时已经设置好正确的导出值。

image.png