命令 | 规范 | 调用 | 本质 | 特色 |
---|---|---|---|---|
require |
CommonJS 规范 |
运行时调用 | 赋值过程 | 非语言层面的标准。 社区方案,提供了服务器/浏览器的模块加载方案。只能在运行时肯定模块的依赖关系及输入/输出的变量,没法进行静态优化。 |
import |
es6+ 的语法标准 |
编译时调用 | 解构过程 | 语言规格层面支持模块功能。支持编译时静态分析,便于JS 引入宏和类型检验。动态绑定 |
好比分析这一段 :es6
import { readFile } from 'fs';
js
代码被 JavaScript
引擎编译时, 并将上面 fs
模块的属性 readFile
指向对应模块的 export const readFile()
方法上,注意这里只是作了指针指向,而并非执行 fs
模块。当执行 readFile()
时,就会去找指针指向的代码并执行。浏览器
区分于CommonJS
模块:服务器
let { stat, exists, readFile } = require('fs');
其实上面代码是先执行 fs
模块,获得一份代码拷贝,再获取对应的属性或方法的。优化