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