| 命令 | 規範 | 調用 | 本質 | 特點 |
|---|---|---|---|---|
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 模塊,得到一份代碼拷貝,再獲取對應的屬性或方法的。