1. 程式人生 > 其它 >import和require的區分

import和require的區分

技術標籤: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'); } })();