require/exports 和 import/export 区别
前言
刚开始写的时候不太了解这两者的区别,到底什么时候用require/exports什么时候用import/export呢?
require/exports
Node.js 本身没有模块化的标准,但是社区诞生了许多规范,比如require/exports遵循 CommonJS 规范,require.js遵循 AMD,seajs遵循 CMD,无论使用场景有那么多,但是依然不是标准,具体使用方法如下
1 | const fs = require("fs"); |
import/export
import/export跟上面的不同,他是 ES6 正式标准下的产物,使用起来也复杂了许多
1 | import fs from 'fs' |
在export实际上是export一个对象,通过key然后import所需的value,如果默认export则需要增加default关键词,import的时候也可以更改key的别名,全部绑定在*的操作,如果你使用过 ES6 语法就是知道这类似解构的概念。
区别
现在看来,感觉两者就类似语法上的区别,实际上他们是运行时和编译时区别:
- 通过
require可以在任意地方使用,是运行时的,他类似一个输出和赋值连接的概念; import必须要在文件开头使用,是编译的时候执行,刚刚提到也是,他类似输出然后解构的概念;
按照上面的区别,可以得出import编译时执行,所以如果实际上不存在export,那么在编译过程中就已经会报错,而require在运行过程中引入, 如果仅用到其中一个方法,也要把整个模块引入内存,所以对比起来,import会性能提高一点。