Baseline Widely available *
import()
è¯æ³ï¼éå¸¸è¢«ç§°ä¸ºå¨æå¯¼å
¥ï¼æ¯ä¸ç§å
è®¸å¼æ¥å卿å°å° ECMAScript 模åå è½½å°ä¸ä¸ªæ½å¨ç鿍¡åç¯å¢ä¸çç±»å½æ°è¡¨è¾¾å¼ã
è·ä¸ä¹å¯¹åºç声æå¼é£æ ¼ä¸åï¼å¨æå¯¼å ¥åªæå¨è¢«éè¦æ¶æä¼æ±å¼ï¼å¹¶æä¾äºæ´å¼ºå¤§çè¯æ³çµæ´»æ§ã
è¯æ³import(moduleName)
import(moduleName, options)
import()
è°ç¨æ¯ä¸ä¸ªç±»ä¼¼äºå½æ°è°ç¨çè¯æ³ï¼ä½ import
æ¬èº«æ¯ä¸ä¸ªå
³é®åï¼è䏿¯ä¸ä¸ªå½æ°ãä½ ä¸è½å const myImport = import
飿 ·ä¸ºå
¶æ·»å å«åï¼è¿ä¼æåº SyntaxError
ã
åªæå¨è¿è¡æ¶ä¹æ¯æ options
æ¶ï¼å°¾åéå·æè¢«å
许使ç¨ã请æ¥çæµè§å¨å
¼å®¹æ§é¨åã
moduleName
è¦å¯¼å ¥ç模åãæ è¯ç¬¦çæ±å¼æ¯å®¿ä¸»ç¹å¼çï¼host-specifiedï¼ï¼ä½å§ç»éµå¾ªä¸éæç import 声æç¸åçç®æ³ã
options
ä¸ä¸ªå å«äºå¯¼å ¥é项ç对象ã以䏿¯å¯è¯å«çé®ï¼
with
è¿åä¸ä¸ª promiseï¼
moduleName
䏿æå¯¼åºç对象ãmoduleName
åå符串强å¶è½¬æ¢æ¶æåºé误ï¼å以æåºçé误æç»ãmoduleName
å¼ç¨ç模åä¸åå¨ï¼å以å®ç°å®ä¹çé误æç»ï¼Node 使ç¨éç¨ç Error
ï¼èæææµè§å¨ä½¿ç¨ TypeError
ï¼ã夿³¨ï¼ import()
仿¥ä¸ä¼åæ¥å°æåºé误ã
import 声æè¯æ³ï¼import something from "somewhere"
ï¼æ¯éæçï¼å¹¶ä¸æ»æ¯ä¼å¨ä¸å è½½æ¶å°±å¯¹å¯¼å
¥çæ¨¡åæ±å¼ã卿坼å
¥å
许ç»è¿ import 声æçè¯æ³åæ§ï¼syntactic rigidityï¼ï¼å¹¶ææ¡ä»¶å°ææéå 载模åã以䏿¯ä½ å¯è½éè¦ä½¿ç¨å¨æå¯¼å
¥çä¸äºåå ï¼
eval
æèæ¬æä»¶ï¼æ¶ãä» å¨å¿ è¦æ¶ä½¿ç¨å¨æå¯¼å ¥ãéæå¯¼å ¥æ´éåå è½½åå§ä¾èµé¡¹ï¼å¹¶ä¸å¯ä»¥æ´å®¹æå°ä»éæåæå·¥å ·åææ ä¼åä¸è·çã
å¦æä½ çæä»¶ä¸æ¯ä½ä¸ºæ¨¡åè¿è¡çï¼å¦æå®å¨ HTML æä»¶ä¸è¢«å¼ç¨ï¼èæ¬æ ç¾å¿
é¡»æ type="module"
屿§ï¼ï¼ä½ å°æ æ³ä½¿ç¨éæå¯¼å
¥å£°æãèå¦ä¸æ¹é¢ï¼å¼æ¥ç卿坼å
¥è¯æ³å´å§ç»å¯ç¨ï¼å®å
è®¸ä½ å°æ¨¡å导å
¥å°é模åç¯å¢ä¸ã
options
åæ°å
许ä¸åç±»åç导å
¥é项ãä¾å¦ import 屿§ï¼
import("./data.json", { with: { type: "json" } });
å¨ææ¨¡å导å
¥å¹¶ä¸å¨æææ§è¡ä¸ä¸æä¸é½å¯ä½¿ç¨ãä¾å¦ï¼import()
å¯ä»¥å¨ä¸»çº¿ç¨ãå
±äº«/ä¸ç¨ worker ä¸ä½¿ç¨ï¼ä½å¦æå¨ service worker æ worklet ä¸è°ç¨ï¼å伿åºé误ã
模åå½å空é´å¯¹è±¡æ¯ä¸ä¸ªæè¿°æ¨¡åææå¯¼åºç对象ã宿¯ä¸ä¸ªéæå¯¹è±¡ï¼å¨æ¨¡å被æ±å¼æ¶å建ãæä¸¤ç§æ¹å¼å¯ä»¥è®¿é®æ¨¡åçæ¨¡åå½å空é´å¯¹è±¡ï¼éè¿å½å空é´å¯¼å
¥ï¼import * as name from moduleName
ï¼æéè¿å¨æå¯¼å
¥çå
ç°å¼ã
模åå½å空é´å¯¹è±¡æ¯ä¸ä¸ªå¯å°çãå
·æ null
ååç对象ãä¹å°±æ¯è¯´ï¼å¯¹è±¡çææå符串é®å¯¹åºäºæ¨¡åç导åºï¼å¹¶ä¸æ°¸è¿ä¸ä¼æé¢å¤çé®ãææé®é½æ¯ä»¥åå
¸åºå¯æä¸¾çï¼å³ Array.prototype.sort()
çé»è®¤è¡ä¸ºï¼ï¼é»è®¤å¯¼åºä»¥å为 default
çé®å¯ç¨ãæ¤å¤ï¼æ¨¡åå½å空é´å¯¹è±¡å
·æä¸ä¸ªå¼ä¸º "Module"
ç [Symbol.toStringTag]
屿§ï¼å¨ Object.prototype.toString()
ä¸è¢«ä½¿ç¨ã
å¨ä½¿ç¨ Object.getOwnPropertyDescriptors()
è·åå®ä»¬çæè¿°ç¬¦æ¶ä¼åç°ï¼åç¬¦ä¸²å±æ§æ¯ä¸å¯é
ç½®çåå¯åå
¥çãç¶èå®ä»¬å®é
䏿¯åªè¯»çï¼å ä¸ºä½ ä¸è½ç»å±æ§éæ°èµä¸ä¸ªæ°çå¼ãè¿äºå¼å¯ä»¥ç±å¯¼åºå®ä»¬ç模åéæ°èµå¼ï¼ä½ä¸è½ç±å¯¼å
¥å®ä»¬ç模åéæ°èµå¼ââè¿ç§è¡ä¸ºåæ äºéæå¯¼å
¥æå建çâ宿¶ç»å®âã屿§çå¯åå
¥æ§åæ äºå¼æ¯å¯è½åçååçï¼å 为ä¸å¯é
ç½®åä¸å¯åå
¥ç屿§å¿
é¡»æ¯å¸¸éãä¾å¦ï¼ä½ å¯ä»¥éæ°ç»ä¸ä¸ªå¯¼åºçåéèµå¼ï¼å¹¶ä¸å¯ä»¥å¨æ¨¡åå½å空é´å¯¹è±¡ä¸è§å¯å°æ°çå¼ã
æ¯ä¸ªæ¨¡åæ è¯ç¬¦å¯¹åºä¸ä¸ªå¯ä¸ç模åå½å空é´å¯¹è±¡ï¼æä»¥ä¸é¢ç代ç éå¸¸æ¯æ£ç¡®çï¼
import * as mod from "/my-module.js";
import("/my-module.js").then((mod2) => {
console.log(mod === mod2); // true
});
é¤äºä¸ä¸ªå¥æªçæ
åµï¼ç±äº promise 对象永è¿ä¸ä¼å
ç°ä¸º thenableï¼å¦æ my-module.js
æ¨¡åæ°å¥½å¯¼åºäºä¸ä¸ªå为 then()
ç彿°ï¼é£ä¹è¯¥å½æ°å°å¨å¨æå¯¼å
¥ç promise å
ç°æ¶èªå¨è¢«è°ç¨ï¼å ä¸ºè¿æ¯ promise è§£å³å¤çæµç¨çä¸é¨åã
// my-module.js
export function then(resolve) {
console.log("then() 已被è°ç¨");
resolve(1);
}
// main.js
import * as mod from "/my-module.js";
import("/my-module.js").then((mod2) => {
// æå°âthen() 已被è°ç¨â
console.log(mod === mod2); // false
});
è¦åï¼ ä¸è¦ä»æ¨¡åä¸å¯¼åºå为 then()
ç彿°ãè¿å°å¯¼è´æ¨¡åå¨å¨æå¯¼å
¥åéæå¯¼å
¥æ¶çè¡ä¸ºä¸åã
(async () => {
if (somethingIsTrue) {
// 导å
¥æ¨¡å以è·åå
¶å¯ä½ç¨
await import("/modules/my-module.js");
}
})();
å¦æä½ ç项ç®ä½¿ç¨å¯¼åº ESM çå ï¼ä½ ä¹å¯ä»¥ä» å¯¼å ¥å®ä»¬ä»¥è·åå ¶å¯ä½ç¨ãè¿å°ä» è¿è¡å çå ¥å£ç¹æä»¶ï¼ä»¥åå®å¯¼å ¥ç任使件ï¼ä¸ç代ç ã
å¯¼å ¥é»è®¤å¼å¦æä½ æ£å¨è§£æå¯¼å
¥ç模åå½å空é´å¯¹è±¡ï¼é£ä¹ä½ å¿
é¡»éå½å default
é®ï¼å 为 default
æ¯ä¿çåã
(async () => {
if (somethingIsTrue) {
const {
default: myDefault,
foo,
bar,
} = await import("/modules/my-module.js");
}
})();
æ ¹æ®ç¨æ·æä½æé导å
¥
è¿ä¸ªç¤ºä¾å±ç¤ºäºå¦ä½æ ¹æ®ç¨æ·æä½ï¼å¨æ¬ä¾ä¸ä¸ºæé®ç¹å»ï¼å°åè½å è½½å°é¡µé¢ä¸ï¼ç¶åå¨è¯¥æ¨¡åä¸è°ç¨ä¸ä¸ªå½æ°ãè¿ä¸æ¯å®ç°æ¤åè½çå¯ä¸æ¹å¼ãimport()
彿°ä¹æ¯æ await
ã
const main = document.querySelector("main");
for (const link of document.querySelectorAll("nav > a")) {
link.addEventListener("click", (e) => {
e.preventDefault();
import("/modules/my-module.js")
.then((module) => {
module.loadPageInto(main);
})
.catch((err) => {
main.textContent = err.message;
});
});
}
æ ¹æ®ç¯å¢å¯¼å
¥ä¸åçæ¨¡å
卿å¡å¨ç«¯æ¸²æçè¿ç¨ä¸ï¼ä½ å¯è½éè¦å¨æå¡å¨ææµè§å¨ä¸å è½½ä¸åçé»è¾ï¼å 为å®ä»¬ä¸ä¸åçå
¨å±å¯¹è±¡ææ¨¡å交äºï¼ä¾å¦ï¼æµè§å¨ä»£ç å¯ä»¥è®¿é® document
å navigator
ç Web APIï¼èæå¡å¨ä»£ç å¯ä»¥è®¿é®æå¡å¨æä»¶ç³»ç»ï¼ãä½ å¯ä»¥éè¿æ¡ä»¶å¨æå¯¼å
¥æ¥å®ç°è¿ä¸ç¹ã
let myModule;
if (typeof window === "undefined") {
myModule = await import("module-used-on-server");
} else {
myModule = await import("module-used-in-browser");
}
使ç¨éåé¢éæ è¯ç¬¦å¯¼å
¥æ¨¡å
å¨æå¯¼å ¥å 许任ä½è¡¨è¾¾å¼ä½ä¸ºæ¨¡åæ è¯ç¬¦ï¼èä¸ä» ä» æ¯å符串åé¢éã
è¿éï¼æä»¬åæ¶å è½½ 10 个模åï¼å¦ /modules/module-0.js
ã/modules/module-1.js
çï¼ï¼å¹¶è°ç¨æ¯ä¸ªæ¨¡å导åºç load
彿°ã
Promise.all(
Array.from({ length: 10 }).map(
(_, index) => import(`/modules/module-${index}.js`),
),
).then((modules) => modules.forEach((module) => module.load()));
è§è æµè§å¨å
¼å®¹æ§ åè§
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4