import和require的區分
阿新 • • 發佈:2021-01-13
技術標籤:ES6/ES5
require
會載入fs的所有方法,執行時載入
// CommonJS模組
let { stat, exists, readfile } = require('fs');
// 等同於
let _fs = require('fs');
let stat = _fs.stat;
let exists = _fs.exists;
let readfile = _fs.readfile;
上面程式碼的實質是整體載入fs模組(即載入fs的所有方法),生成一個物件(_fs),然後再從這個物件上面讀取 3 個方法。
缺點:因為只有執行時才能得到這個物件,導致完全沒辦法在編譯時做“靜態優化”。
- import
// ES6模組
import { stat, exists, readFile } from 'fs';
// 可重新命名
import { stat as status, exists as exiting, readFile as read } from 'fs';
//匯入預設值
//引入模組fs可能有一個default export(無論它是物件,函式,類等)可用。
//然後可以使用import語句來匯入這樣的預設介面。
import myDefault from 'fs';
//也可以同時將default語法與上述用法(名稱空間匯入或命名匯入)一起使用。
//在這種情況下,default匯入必須首先宣告。 例如:
import myDefault, * as myModule from 'fs';
// 或者
import myDefault, {stat, exists} from '/modules/my-module.js';
上面程式碼的實質是從fs模組載入 3 個方法,其他方法不載入。這種載入稱為“編譯時載入”或者靜態載入,即 ES6 可以在編譯時就完成模組載入,效率要比 CommonJS 模組的載入方式高
動態引入import(在某種情況下import)
(async () => {
if (somethingIsTrue) {
const { default: myDefault, foo, bar } = await import('/modules/my-module.js');
}
})();