中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

javascript如何動態導入ECMAScript模塊

發布時間:2021-07-02 11:03:32 來源:億速云 閱讀:219 作者:小新 欄目:web開發

小編給大家分享一下javascript如何動態導入ECMAScript模塊,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

ECMAScript(又名ES2015或ES)模塊是在JavaScript中組織內聚代碼塊的一種方法。

ES模塊系統有2個部分:

  • import模塊 - 使用 import { func } from './myModule'

  • export模塊-  使用 export const func = () => {}

import 模塊是使用 import 語法導入依賴項的模塊:

import { concat } from './concatModule';

concat('a', 'b'); // => 'ab'

而被導入的模塊使用export語法從自身導出組件:

export const concat = (paramA, paramB) => paramA + paramB;

import { concat } from './concatModule'使用ES模塊的方式是靜態的:意味著模塊之間的依賴關系在編譯時就已經知道了。

雖然靜態導入在大多數情況下是有效的,但有時我們想節省客戶的帶寬并有條件地加載模塊。

為了實現這一點,我們可以用不同的方式使用 import(pathToModule) 語法對模塊進行新的動態導入:作為一個函數。動態導入是ES2020開始的一個JavaScript語言特性。

1. 動態模塊的導入

import關鍵字用作函數而不是靜態導入語法時:

const module = await import(pathToModule);

它返回一個promise ,并開始一個加載模塊的異步任務。如果模塊被成功加載,那么promise就會解析到模塊的內容,否則,promise 就會被拒絕。

請注意,pathToModule可以是任何表達式,其值為表示導入模塊路徑的字符串。有效的值是普通的字符串字面意義(如./myModule)或有字符串的變量。

例如,我們在一個異步函數中加載一個模塊。

async function loadMyModule() {
  const myModule = await import('./myModule');
  // ... use myModule
}

loadMyModule();

有趣的是,與靜態導入相反,動態導入接受以模塊路徑求值的表達式

async function loadMyModule(pathToModule) {
  const myModule = await import(pathToModule);
  // ... use myModule
}

loadMyModule('./myModule');

現在,了解了如何加載模塊后,我們來看看如何從導入的模塊中提取組件。

2.導入組件

2.1 導入命名組件

考慮下面的模塊:

// namedConcat.js
export const concat = (paramA, paramB) => paramA + paramB;

這里導出了一個 concat 函數。

如果想動態導入namedConcat.js,并訪問命名的導出concat,那么只需通解構的方式就行了:

async function loadMyModule() {
  const { concat } = await import('./namedConcat');
  concat('b', 'c'); // => 'bc'
}

loadMyModule();

2.2 默認導出

如果模塊是默認導出的,我們可以使用default屬性來訪問。

還是上面的例子,我們將defaultConcat.js里面的concat函數默認導出:

// defaultConcat.js
export default (paramA, paramB) => paramA + paramB;

在動態導入模塊中,可以使用default屬性來訪問:

async function loadMyModule() {
  const { default: defaultImport } = await import('./defaultConcat');
  defaultImport('b', 'c'); // => 'bc'
}

loadMyModule();

注意,default在JavaScript中是一個關鍵字,所以它不能用作變量名。

2.3導入混合形式

如果模塊里面既有默認導出也有命名導出,同樣也是使用解構的方式來訪問:

async function loadMyModule() {
  const { 
    default: defaultImport,
    namedExport1,
    namedExport2
  } = await import('./mixedExportModule');
  // ...
}

loadMyModule();

3.何時使用動態導入

建議在模塊比較大的,或者要根據條件才導入的模塊可以使用動態導入

async function execBigModule(condition) {
  if (condition) {
    const { funcA } = await import('./bigModuleA');
    funcA();
  } else {
    const { funcB } = await import('./bigModuleB');
    funcB();
  }
}

execBigModule(true);

對于小模塊(如前面例子中的namedConcat.jsdefaultConcat.js),只有幾十行代碼,使用動態導入在點殺雞用牛刀感覺。

看完了這篇文章,相信你對“javascript如何動態導入ECMAScript模塊”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丽水市| 利川市| 太谷县| 叶城县| 永泰县| 乳山市| 茂名市| 岳阳市| 额济纳旗| 毕节市| 马龙县| 辽阳县| 特克斯县| 新乡市| 吴忠市| 云梦县| 宁蒗| 盘锦市| 石泉县| 宽甸| 奉化市| 台前县| 银川市| 和龙市| 桂阳县| 永善县| 南岸区| 楚雄市| 天门市| 惠东县| 祁东县| 桓台县| 陆丰市| 繁昌县| 桦川县| 碌曲县| 弥渡县| 丹棱县| 大余县| 饶阳县| 皋兰县|