命令 | 规范 | 调用 | 本质 | 特点 |
---|---|---|---|---|
require |
CommonJS 规范 |
运行时调用 | 赋值过程 | 非语言层面的标准。 社区方案,提供了服务器/浏览器的模块加载方案。只能在运行时确定模块的依赖关系及输入/输出的变量,无法进行静态优化。 |
import |
es6+ 的语法标准 |
编译时调用 | 解构过程 | 语言规格层面支持模块功能。支持编译时静态分析,便于JS 引入宏和类型检验。动态绑定 |
比如分析这一段 :
import { readFile } from 'fs';
js
代码被 JavaScript
引擎编译时, 并将上面 fs
模块的属性 readFile
指向对应模块的 export const readFile()
方法上,注意这里只是做了指针指向,而并不是执行 fs
模块。当执行 readFile()
时,就会去找指针指向的代码并执行。
区分于CommonJS
模块:
let { stat, exists, readFile } = require('fs');
其实上面代码是先执行 fs
模块,得到一份代码拷贝,再获取对应的属性或方法的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。