靜態(tài)的**import**
語(yǔ)句用于導(dǎo)入由另一個(gè)模塊導(dǎo)出的綁定造挽。無(wú)論是否聲明了 strict mode
碱璃,導(dǎo)入的模塊都運(yùn)行在嚴(yán)格模式下弄痹。在瀏覽器中,import
語(yǔ)句只能在聲明了 type="module"
的 script
的標(biāo)簽中使用嵌器。
此外界酒,還有一個(gè)類似函數(shù)的動(dòng)態(tài) import()
,它不需要依賴 type="module"
的script標(biāo)簽嘴秸。
在 script 標(biāo)簽中使用 nomodule
屬性毁欣,可以確保向后兼容。
在您希望按照一定的條件或者按需加載模塊的時(shí)候岳掐,動(dòng)態(tài)import()
是非常有用的凭疮。而靜態(tài)型的 import
是初始化加載依賴項(xiàng)的最優(yōu)選擇,使用靜態(tài) import
更容易從代碼靜態(tài)分析工具和 tree shaking 中受益串述。
語(yǔ)法
import defaultExport from "module-name";
import * as name from "module-name";
import { export } from "module-name";
import { export as alias } from "module-name";
import { export1 , export2 } from "module-name";
import { foo , bar } from "module-name/path/to/specific/un-exported/file";
import { export1 , export2 as alias2 , [...] } from "module-name";
import defaultExport, { export [ , [...] ] } from "module-name";
import defaultExport, * as name from "module-name";
import "module-name";
var promise = import("module-name");//這是一個(gè)處于第三階段的提案执解。
name
參數(shù)是“導(dǎo)入模塊對(duì)象”的名稱,它將用一種名稱空間來(lái)引用導(dǎo)入模塊的接口纲酗。export參數(shù)指定單個(gè)的命名導(dǎo)出衰腌,而import * as name
語(yǔ)法導(dǎo)入所有導(dǎo)出接口,即導(dǎo)入模塊整體觅赊。以下示例闡明該語(yǔ)法右蕊。
導(dǎo)入整個(gè)模塊的內(nèi)容
這將myModule
插入當(dāng)前作用域,其中包含來(lái)自位于/modules/my-module.js
文件中導(dǎo)出的所有接口吮螺。
import * as myModule from '/modules/my-module.js';
在這里饶囚,訪問(wèn)導(dǎo)出接口意味著使用模塊名稱(在本例為“myModule”)作為命名空間。例如鸠补,如果上面導(dǎo)入的模塊包含一個(gè)接口doAllTheAmazingThings()
萝风,你可以這樣調(diào)用:
myModule.doAllTheAmazingThings();
導(dǎo)入單個(gè)接口
給定一個(gè)名為myExport
的對(duì)象或值,它已經(jīng)從模塊my-module
導(dǎo)出(因?yàn)檎麄€(gè)模塊被導(dǎo)出)或顯式地導(dǎo)出(使用export
語(yǔ)句)紫岩,將myExport
插入當(dāng)前作用域规惰。
import {myExport} from '/modules/my-module.js';
導(dǎo)入多個(gè)接口
這將foo
和bar
插入當(dāng)前作用域。
import {foo, bar} from '/modules/my-module.js';
導(dǎo)入帶有別名的接口
你可以在導(dǎo)入時(shí)重命名接口泉蝌。例如歇万,將shortName
插入當(dāng)前作用域。
import {reallyReallyLongModuleExportName as shortName}
from '/modules/my-module.js';
導(dǎo)入時(shí)重命名多個(gè)接口
使用別名導(dǎo)入模塊的多個(gè)接口梨与。
import {
reallyReallyLongModuleMemberName as shortName,
anotherLongModuleName as short
} from '/modules/my-module.js';
僅為副作用而導(dǎo)入一個(gè)模塊
整個(gè)模塊僅為副作用(中性詞堕花,無(wú)貶義含義)而導(dǎo)入,而不導(dǎo)入模塊中的任何內(nèi)容(接口)粥鞋。 這將運(yùn)行模塊中的全局代碼, 但實(shí)際上不導(dǎo)入任何值缘挽。
import '/modules/my-module.js';
導(dǎo)入默認(rèn)值
引入模塊可能有一個(gè)default
export
(無(wú)論它是對(duì)象,函數(shù),類等)可用壕曼。然后可以使用import
語(yǔ)句來(lái)導(dǎo)入這樣的默認(rèn)接口苏研。
最簡(jiǎn)單的用法是直接導(dǎo)入默認(rèn)值:
import myDefault from '/modules/my-module.js';
也可以同時(shí)將default
語(yǔ)法與上述用法(命名空間導(dǎo)入或命名導(dǎo)入)一起使用。在這種情況下腮郊,default
導(dǎo)入必須首先聲明摹蘑。 例如:
import myDefault, * as myModule from '/modules/my-module.js';
// myModule used as a namespace
或者
import myDefault, {foo, bar} from '/modules/my-module.js';
// specific, named imports
動(dòng)態(tài)import
關(guān)鍵字import可以像調(diào)用函數(shù)一樣來(lái)動(dòng)態(tài)的導(dǎo)入模塊。以這種方式調(diào)用轧飞,將返回一個(gè) promise
衅鹿。
import('/modules/my-module.js')
.then((module) => {
// Do something with the module.
});
這種使用方式也支持 await
關(guān)鍵字。
let module = await import('/modules/my-module.js');