ES6 模块与 CommonJS 模块差异

62 阅读1分钟
CommonJS模块ES6模块
语法上module.exports = {} 导出一个模块对象
require(‘file_path’) 引入模块对象
export 导出指定数据
import 引入具体数据
输出值类型拷贝
一旦输出一个值,模块内部的变化就影响不到这个值。
动态引用
不会缓存值,模块里面的变量绑定其所在的模块。
加载时机运行时加载
CommonJS 模块就是对象;即在输入时是先加载整个模块,生成一个对象,然后再从这个对象上面读取方法,这种加载称为“运行时加载”。
编译时加载
ES6 模块不是对象,而是通过 export 命令显式指定输出的代码,import时采用静态命令的形式。即在import时可以指定加载某个输出值,而不是加载整个模块,这种加载称为“编译时加载”

PS:CommonJS 加载的是一个对象(即module.exports属性),该对象只有在脚本运行完才会生成。
而 ES6 模块不是对象,它的对外接口只是一种静态定义,在代码静态解析阶段就会生成