import
åºçº¿
广æ³å¯ç¨
*
èª 2018å¹´5æ èµ·ï¼æ¤ç¹æ§å·²å¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æï¼å¯å¨å¤§å¤æ°è®¾å¤åæµè§å¨çæ¬ä¸æ£å¸¸ä½¿ç¨ã
* æ¤ç¹æ§çæäºé¨åçæ¯æç¨åº¦å¯è½ææä¸åã
éæ import 声æç¨äºå¯¼å
¥ç±å¦ä¸ä¸ªæ¨¡å导åºçåªè¯»å¨æï¼liveï¼ç»å®ã导å
¥çç»å®è¢«ç§°ä¸ºå¨æç»å®ï¼å 为å®ä»¬ä¼ç±å¯¼åºç»å®çæ¨¡åæ´æ°ï¼ä½å¯¼å
¥æ¨¡åä¸è½éæ°èµå¼ã
è¦å¨æºæä»¶ä¸ä½¿ç¨ import 声æï¼è¯¥æä»¶å¿
须被è¿è¡æ¶è§£é为模åãå¨ HTML ä¸ï¼è¿å¯ä»¥éè¿å¨ <script> æ ç¾ä¸æ·»å type="module" æ¥å®ç°ã模åä¼èªå¨ä»¥ä¸¥æ ¼æ¨¡å¼è§£éã
æ¤å¤ï¼è¿æä¸ä¸ªç±»ä¼¼å½æ°ç卿 import()ï¼å®ä¸éè¦ä¾èµ type="module" ç script æ ç¾ã
è¯æ³
import defaultExport from "module-name";
import * as name from "module-name";
import { export1 } from "module-name";
import { export1 as alias1 } from "module-name";
import { default as alias } from "module-name";
import { export1, export2 } from "module-name";
import { export1, export2 as alias2, /* ⦠*/ } from "module-name";
import { "string name" as alias } from "module-name";
import defaultExport, { export1, /* ⦠*/ } from "module-name";
import defaultExport, * as name from "module-name";
import "module-name";
defaultExport-
å¼ç¨æ¨¡åé»è®¤å¯¼åºçåç§°ãå¿ é¡»æ¯ææç JavaScript æ è¯ç¬¦ã
module-name-
è¦å¯¼å ¥ç模åãæ¨¡åçè·¯å¾æåç§°æ¯ç±è¿è¡ç¯å¢å³å®çãè¿éå¸¸æ¯æåå 嫿¨¡åç
.jsæä»¶çç¸å¯¹æç»å¯¹è·¯å¾ãå¨ Node ç¯å¢ä¸ï¼æ²¡ææ©å±åçå¯¼å ¥é常æånode_modulesä¸çå ãæäºæå å·¥å ·å¯è½å è®¸å¯¼å ¥æ²¡ææ©å±åçæä»¶ï¼è¯·æ£æ¥ä½ çç¯å¢ã模åååªå 许使ç¨åå¼å·ååå¼å·çå符串ã name-
模å对象çåç§°ï¼å°ç¨ä½å¼ç¨å¯¼å ¥æ¶çå½å空é´ãå¿ é¡»æ¯ä¸ä¸ªææç JavaScript æ è¯ç¬¦ã
exportN-
è¦å¯¼å ¥ç导åºåç§°ãåç§°å¯ä»¥æ¯æ è¯ç¬¦æå符串åé¢éï¼è¿åå³äº
module-name声æå¯¼åºçæ¯ä»ä¹ã妿宿¯ä¸ä¸ªå符串åé¢éï¼é£ä¹å®å¿ 须被å«åå为ä¸ä¸ªææçæ è¯ç¬¦ã aliasN-
å°å¼ç¨æå®çå¯¼å ¥çåç§°ãå¿ é¡»æ¯ææç JavaScript æ è¯ç¬¦ã
æè¿°
import 声æåªè½åºç°å¨æ¨¡åä¸ï¼å¹¶ä¸åªè½å¨é¡¶çº§ä½ç¨åä¸ï¼å³ä¸è½å¨åã彿°çå
é¨ï¼ã妿å¨é模åä¸ä¸æä¸éå° import 声æï¼ä¾å¦ï¼æ²¡æ type="module" ç <script> æ ç¾ãevalãnew Functionï¼è¿äºé½æâèæ¬âæâ彿°ä½âä½ä¸ºè§£æç®æ ï¼ï¼åä¼æåº SyntaxErrorãè¦å¨é模åä¸ä¸æä¸å 载模åï¼è¯·æ¹ç¨å¨æå¯¼å
¥è¯æ³ã
ææå¯¼å
¥çç»å®ä¸è½ä¸ä»»ä½å
¶ä»å£°æå¨åä¸ä¸ªä½ç¨åä¸ï¼å
æ¬ letãconstãclassãfunctionãvarï¼ä»¥å import 声æã
import 声æå¨è®¾è®¡ä¸æ¯è¯æ³ä¸¥æ ¼çï¼ä¾å¦ï¼åªæå符串åé¢é说æç¬¦ï¼åªå
许å¨é¡¶çº§ä½ç¨åï¼ææç»å®å¿
é¡»æ¯æ è¯ç¬¦ï¼ï¼è¿å
许模åå¨è¢«æ±å¼ä¹åè¿è¡éæåæå龿¥ãè¿æ¯ä½¿æ¨¡åæ¯å¤©ç¶å¼æ¥çå
³é®ï¼æ¯æäºåé¡¶å± await è¿æ ·çç¹æ§ã
å¯¼å ¥å£°æçå½¢å¼
import 声ææåç§å½¢å¼ï¼
- å
·å导å
¥ï¼
import { export1, export2 } from "module-name"; - é»è®¤å¯¼å
¥ï¼
import defaultExport from "module-name"; - å½å空é´å¯¼å
¥ï¼
import * as name from "module-name"; - å¯ä½ç¨å¯¼å
¥ï¼
import "module-name";
ä¸é¢æ¯éæè¯æ³ç示ä¾ã
å ·åå¯¼å ¥
ç»å®ä¸ä¸ªå为 myExport çå¼ï¼è¯¥å¼å·²ç»éè¿é弿¹å¼ export * from "another.js" 仿¨¡å my-module 导åºï¼æè
æ¾å¼å°ä½¿ç¨ export è¯å¥å¯¼åºï¼è¿å°æ myExport æå
¥å°å½åä½ç¨åä¸ã
import { myExport } from "/modules/my-module.js";
ä½ å¯ä»¥ä»åä¸ä¸ªæ¨¡åå¯¼å ¥å¤ä¸ªåç§°ã
import { foo, bar } from "/modules/my-module.js";
ä½ å¯ä»¥å¨å¯¼å
¥æ¶éå½å导åºãä¾å¦ï¼è¿ä¼å° shortName æå
¥å½åä½ç¨åã
import { reallyReallyLongModuleExportName as shortName } from "/modules/my-module.js";
模åè¿å¯è½ä»¥å符串åé¢éçå½¢å¼å¯¼åºä¸ä¸ªæåï¼å¦æè¯¥åç¬¦ä¸²ä¸æ¯ä¸ä¸ªææçæ è¯ç¬¦ï¼é£ä¹ä½ å¿ é¡»å¯¹å ¶è¿è¡å«ååï¼ä»¥ä¾¿å¨å½å模åä¸ä½¿ç¨å®ã
// /modules/my-module.js
const a = 1;
export { a as "a-b" };
import { "a-b" as a } from "/modules/my-module.js";
夿³¨ï¼import { x, y } from "mod" å¹¶ä¸çåäº import defaultExport from "mod" ç¶åä» defaultExport ä¸è§£æåº x å yãå
·å导å
¥åé»è®¤å¯¼å
¥æ¯ JavaScript 模åä¸ä¸åçè¯æ³ã
é»è®¤å¯¼å ¥
é»è®¤å¯¼åºéè¦ä½¿ç¨ç¸åºçé»è®¤å¯¼å ¥è¯æ³æ¥å¯¼å ¥ãç´æ¥å¯¼å ¥é»è®¤å¯¼åºçæç®åççæ¬ï¼
import myDefault from "/modules/my-module.js";
ç±äºé»è®¤å¯¼åºæ²¡ææç¡®æå®åç§°ï¼å æ¤ä½ å¯ä»¥ä¸ºæ è¯ç¬¦æå®ä»»ä½ä½ 忬¢çåç§°ã
ä¹å¯ä»¥å¨ä½¿ç¨å½å空é´å¯¼å ¥æå ·åå¯¼å ¥æ¶æå®é»è®¤å¯¼å ¥ãå¨è¿ç§æ åµä¸ï¼å¿ é¡»é¦å 声æé»è®¤å¯¼å ¥ãä¾å¦ï¼
import myDefault, * as myModule from "/modules/my-module.js";
// myModule.default å myDefault æåç¸åçç»å®
æè
import myDefault, { foo, bar } from "/modules/my-module.js";
导å
¥ä¸ä¸ªå为 default çåç§°ä¸é»è®¤å¯¼å
¥ææç¸åãå¿
须对å
¶è¿è¡å«ååï¼å 为 default æ¯ä¿çåã
import { default as myDefault } from "/modules/my-module.js";
å½å空é´å¯¼å ¥
以ä¸ä»£ç å° myModule æå
¥å½åä½ç¨åï¼å
¶ä¸å
嫿¥èª /modules/my-module.js 模åçææå¯¼åºã
import * as myModule from "/modules/my-module.js";
å¨è¿éï¼myModule 表示ä¸ä¸ªå½å空é´å¯¹è±¡ï¼å
¶ä¸å
嫿¥èª /modules/my-module.js 模åçææå¯¼åºãä¾å¦ï¼å¦æä¸é¢ç模å导å
¥äºä¸ä¸ªå¯¼åº doAllTheAmazingThings()ï¼ä½ å¯ä»¥åè¿æ ·è°ç¨å®ï¼
myModule.doAllTheAmazingThings();
myModule æ¯ä¸ä¸ªå¯å°ç对象ï¼å
¶åå为 nullã宿ä¾äºä¸ä¸ªå为 default çé®ï¼ç¨äºè®¿é®é»è®¤å¯¼åºãæå
³æ´å¤ä¿¡æ¯ï¼è¯·åèæ¨¡åå½å空é´å¯¹è±¡ã
夿³¨ï¼JavaScript 没æå import * from "module-name" è¿æ ·çéé
符导å
¥ï¼å 为å®ä¼å¯¼è´åç§°å²çªçå¯è½æ§å¾é«ã
ä» ä¸ºäºå ¶å¯ä½ç¨èå¯¼å ¥æ¨¡å
å¯¼å ¥æ´ä¸ªæ¨¡ååªæ¯ä¸ºäºäº§çå¯ä½ç¨ï¼èä¸å¯¼å ¥ä»»ä½å 容ãè¿ä¼è¿è¡æ¨¡åçå ¨å±ä»£ç ï¼ä½å®é ä¸ä¸ä¼å¯¼å ¥ä»»ä½å¼ã
import "/modules/my-module.js";
è¿ç»å¸¸ç¨äº polyfillï¼å®ä¼ä¿®æ¹å ¨å±åéã
æå
å¯¼å ¥ç声æä¼è¢«æåãå¨è¿ç§æ åµä¸ï¼è¿æå³çå¯¼å ¥å¼å ¥çæ è¯ç¬¦å¨æ´ä¸ªæ¨¡åèå´å å¯ç¨ï¼å¹¶ä¸å®ä»¬çå¯ä½ç¨æ¯å¨æ¨¡åå ¶ä½ä»£ç è¿è¡ä¹å产ççã
myModule.doAllTheAmazingThings(); // myModule.doAllTheAmazingThings å¨ä¸ä¸è¡å¯¼å
¥
import * as myModule from "/modules/my-module.js";
示ä¾
>æ åå¯¼å ¥
å¨è¿ä¸ªç¤ºä¾ä¸ï¼æä»¬å建ä¸ä¸ªå¯éç¨ç模åï¼å®å¯¼åºäºä¸ä¸ªå½æ°ï¼ç¨äºè·åç»å®èå´å çææè´¨æ°ã
// getPrimes.js
/**
* è¿åä¸ä¸ªå°äº `max` çè´¨æ°å表ã
*/
export function getPrimes(max) {
const isPrime = Array.from({ length: max }, () => true);
isPrime[0] = isPrime[1] = false;
isPrime[2] = true;
for (let i = 2; i * i < max; i++) {
if (isPrime[i]) {
for (let j = i ** 2; j < max; j += i) {
isPrime[j] = false;
}
}
}
return [...isPrime.entries()]
.filter(([, isPrime]) => isPrime)
.map(([number]) => number);
}
import { getPrimes } from "/modules/getPrimes.js";
console.log(getPrimes(10)); // [2, 3, 5, 7]
å¯¼å ¥çå¼åªè½ç±å¯¼åºè ä¿®æ¹
è¢«å¯¼å ¥çæ è¯ç¬¦æ¯ä¸ä¸ªå¨æç»å®ï¼å 为å®å¯è½ç±å¯¼åºå®ç模åéæ°èµå¼ã使¯ï¼å¯¼å ¥å®ç模åä¸è½éæ°èµå¼ãç¶èï¼ä»»ä½æ¥æå¯¼åºå¯¹è±¡ç模åé½å¯ä¿®æ¹è¯¥å¯¹è±¡ï¼å¹¶ä¼å½±åå°ææå¯¼å ¥è¯¥å¼ç模åã
ä½ ä¹å¯ä»¥éè¿æ¨¡åå½å空é´å¯¹è±¡è§å¯å°æ°çå¼ã
// my-module.js
export let myValue = 1;
setTimeout(() => {
myValue = 2;
}, 500);
// main.js
import { myValue } from "/modules/my-module.js";
import * as myModule from "/modules/my-module.js";
console.log(myValue); // 1
console.log(myModule.myValue); // 1
setTimeout(() => {
console.log(myValue); // 2ï¼my-module æ´æ°äºå®çå¼
console.log(myModule.myValue); // 2
myValue = 3; // TypeError: Assignment to constant variable.
// 导å
¥æ¨¡ååªè½è¯»å该å¼ä½ä¸è½éæ°å¯¹å®èµå¼ã
}, 1000);
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-imports> |
æµè§å¨å ¼å®¹æ§
åè§
exportimport()import.meta- é¢è§ ES6 模å以å ES2015ãES2016 åæ´å¤å 容ï¼è½½äº blogs.windows.com (2016)
- ES6 æ·±å ¥æµ åºï¼æ¨¡åï¼è½½äº hacks.mozilla.org (2015)
- æ·±å ¥ææ ES 模åï¼è½½äº hacks.mozilla.org (2018)
- æ¢ç´¢ JSï¼ç¬¬ 16 ç« ï¼æ¨¡åï¼ç± Dr. Axel Rauschmayer æ°å
- Export å Importï¼è½½äº javascript.info