require至关于module.exports的传送门,module.exports后面的内容是什么,require的结果就是什么,对象、数字、字符串、函数……再把require的结果赋值给某个变量,至关于把require和module.exports进行平行空间的位置重叠。 并且require理论上能够运用在代码的任何地方,甚至不须要赋值给某个变量以后再使用,好比: require('./a')(); // a模块是一个函数,当即执行a模块函数 var data = require('./a').data; // a模块导出的是一个对象 var a = require('./a')[0]; // a模块导出的是一个数组 在使用时,彻底能够忽略模块化这个概念来使用require,仅仅把它当作一个node内置的全局函数,它的参数甚至能够是表达式: require(process.cwd() + '/a'); 可是import则不一样,它是编译时的(require是运行时的),它必须放在文件开头,并且使用格式也是肯定的,无可置疑。它不会将整个模块运行后赋值给某个变量,而是只选择import的接口进行编译,这样在性能上比require好不少。 从理解上,require是赋值过程,import是解构过程 ES7很快也会发布,js引擎们会尽快实现ES6标准的规定,若是一个引擎连标准都实现不了,就会被淘汰, ES6是早晚的事 。若是你如今仍然在代码中部署require,那么等到ES6被引擎支持时,你必须升级你的代码,而若是如今开始部署import,那么将来可能只须要作不多的改动。