require和import的区别
1.规范不同
模块化规范:即为 JavaScript 提供一种模块编写、模块依赖和模块运行的方案。
- require方法是JavaScript 社区中的开发者自己草拟的规则CommonJs推出的。
- import/export 则是TC39 制定的新的 ECMAScript 版本,即 ES6(ES2015)中包含进来。
CommonJS是Node.js中模块化的规范,Node.js无法直接兼容es6语法。现在在Node中使用的 import语法都是由babel编译成 require/exports 来执行的
2.书写方式不同
require/exports :
|
|
import/export :
|
|
3.本质不同
require 运行时加载
|
|
上面代码的实质是整体加载fs
模块(即加载fs
的所有方法),生成一个对象(_fs
),然后再从这个对象上面读取3个方法。这种加载称为“运行时加载”,因为只有运行时才能得到这个对象,导致完全没办法在编译时做“静态优化”。
Import 编译时加载
|
|
上面代码的实质是从fs
模块加载3个方法,其他方法不加载。这种加载称为“编译时加载”或者静态加载,即 ES6 可以在编译时就完成模块加载,效率要比 CommonJS 模块的加载方式高。