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