commonJS 中的 require/exports:
commonJS 模块的重要特性是加载时执行,及脚本代码在 require 的时候,就会全部执
行。一旦出现某个模块被“循环加载”就只输出已经执行的部分,还没有执行的部分是不输出的
ES6 中 import/export :
ES6 模块是动态引用,如果使用 import 从一个模块加载变量,那些变量不会缓存,而是成 为 一个指向被加载模块的引用,import/export 最终都是编译为 require/exports 来执行的
require/exports来自野生规范当中,即这些规范是JavaScript社区中的开发者自己草拟的规则,得到了大家的承认和广泛的应用,比如CommonJS、AMD、CMD等等。而Node遵循CommonJS规范,requireJS遵循 AMD(Asynchronous Module Definition,即异步模块加载机制),seaJS遵循CMD。
因为Node无法直接兼容ES6语法,所以现阶段require/exports仍然是必要且是必须的。
import/export来自ES6的新规范,即TC39 制定的新的 ECMAScript 版本。
babel诞生后,它能将还未被宿主环境(各大浏览器、Node)直接支持的ES6语法编译为ES5,也就是能将ES6 Module 的import/export编译为CommonJS的require/exports这种写法。
差异与不同:
感兴趣的可以去查阅更多资料 谢谢大家