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
会性能提高一点。