Baseline Widely available
export
声æç¨äºä» JavaScript 模åä¸å¯¼åºå¼ã导åºçå¼å¯éè¿ import
声ææå¨æå¯¼å
¥æ¥å°å
¶å¯¼å
¥å
¶ä»ç¨åºã导å
¥ç»å®çå¼ä¼å¨å¯¼åºè¯¥ç»å®ç模åä¸åçååââ彿¨¡åæ´æ°å
¶å¯¼åºç»å®ç弿¶ï¼æ´æ°å°å¨å
¶å¯¼å
¥å¼ä¸å¯è§ã
è¦å¨æºæä»¶ä¸ä½¿ç¨ export
声æï¼è¿è¡æ¶å¿
é¡»å°è¯¥æä»¶è§£é为模åãå¨ HTML ä¸ï¼å¯éè¿å¨ <script>
æ è®°ä¸æ·»å type="module"
æç±å
¶ä»æ¨¡å导å
¥æ¥å®ç°ã模åä¼èªå¨ä»¥ä¸¥æ ¼æ¨¡å¼è§£éã
// 导åºå£°æ
export let name1, name2/*, ⦠*/; // also var
export const name1 = 1, name2 = 2/*, ⦠*/; // also var, let
export function functionName() { /* ⦠*/ }
export class ClassName { /* ⦠*/ }
export function* generatorFunctionName() { /* ⦠*/ }
export const { name1, name2: bar } = o;
export const [ name1, name2 ] = array;
// 导åºå表
export { name1, /* â¦, */ nameN };
export { variable1 as name1, variable2 as name2, /* â¦, */ nameN };
export { variable1 as "string name" };
export { name1 as default /*, ⦠*/ };
// é»è®¤å¯¼åº
export default expression;
export default function functionName() { /* ⦠*/ }
export default class ClassName { /* ⦠*/ }
export default function* generatorFunctionName() { /* ⦠*/ }
export default function () { /* ⦠*/ }
export default class { /* ⦠*/ }
export default function* () { /* ⦠*/ }
// å¯¼åºæ¨¡ååé
export * from "module-name";
export * as name1 from "module-name";
export { name1, /* â¦, */ nameN } from "module-name";
export { import1 as name1, import2 as name2, /* â¦, */ nameN } from "module-name";
export { default, /* â¦, */ } from "module-name";
export { default as name1 } from "module-name";
nameN
è¦å¯¼åºçæ è¯ç¬¦ï¼ä»¥ä¾¿å
¶ä»èæ¬éè¿ import
è¯å¥è¿è¡å¯¼å
¥ï¼ãå¦æä½¿ç¨å¸¦æ as
çå«åï¼å®é
导åºçåç§°å¯ä»¥æå®ä¸ºå符串åé¢éï¼ä½å®å¯è½ä¸æ¯ææçæ è¯ç¬¦ã
æä¸¤ç§ä¸åçå¯¼åºæ¹å¼ï¼å ·å导åºåé»è®¤å¯¼åºãä½ è½å¤å¨æ¯ä¸ä¸ªæ¨¡åä¸å®ä¹å¤ä¸ªå ·å导åºï¼ä½æ¯åªå 许æä¸ä¸ªé»è®¤å¯¼åºãæ¯ç§æ¹å¼å¯¹åºäºä¸è¿°çä¸ç§è¯æ³ï¼
å ·å导åºï¼
// 导åºå
¶å®å°æ¹å£°æçç¹æ§
export { myFunction2, myVariable2 };
// 导åºåä¸ªç¹æ§ï¼å¯å¯¼åº varãletãconstãfunctionãclassï¼
export let myVariable = Math.sqrt(2);
export function myFunction() {
// â¦
}
å¨ export
å
³é®åä¹åï¼ä½ å¯ä»¥ä½¿ç¨ let
ãconst
å var
声æï¼ä»¥å彿°æç±»å£°æãä½ è¿å¯ä»¥ä½¿ç¨ export { name1, name2 }
è¯æ³å¯¼åºå¨å
¶ä»å°æ¹å£°æçåç§°å表ã请注æï¼export {}
ä¸ä¼å¯¼åºä¸ä¸ªç©ºå¯¹è±¡ââ宿¯ä¸ä¸ªä¸å¯¼åºä»»ä½ä¸è¥¿ï¼ä¸ä¸ªç©ºçåç§°å表ï¼çæ æä½å£°æã
导åºå£°æä¸åææ¶æ§æ»åºè§åçéå¶ãä½ å¯ä»¥å¨å£°æåç§° X
ä¹å声æå½å模åå¯¼åº X
ã
export { x };
const x = 1;
// è¿æ ·åæ¯å¯è¡çï¼å 为 `export` åªæ¯ä¸ä¸ªå£°æï¼å¹¶æ²¡æä½¿ç¨ `x` çå¼ã
é»è®¤å¯¼åºï¼
// 导åºäºå
å®ä¹çç¹æ§ä½ä¸ºé»è®¤å¼
export { myFunction as default };
// è¿çåäºï¼
export default myFunction;
// 导åºåä¸ªç¹æ§ä½ä¸ºé»è®¤å¼
export default function () { /* ⦠*/ }
export default class { /* ⦠*/ }
夿³¨ï¼ 导åºå£°æçåç§°å¿
é¡»ç¸äºç¬ç«ã导åºåç§°éå¤æä½¿ç¨å¤ä¸ª default
导åºå°å¯¼è´ SyntaxError
并黿¢æ¨¡å被æ§è¡ã
export default
è¯æ³å
许任ä½è¡¨è¾¾å¼ã
ä½ä¸ºä¸ç§ç¹æ®æ åµï¼å½æ°åç±»æ¯ä½ä¸ºå£°æè䏿¯è¡¨è¾¾å¼å¯¼åºçï¼èä¸è¿äºå£°æå¯ä»¥æ¯å¿åçãè¿æå³ç彿°å°è¢«æåã
// æææ¯å 为 `foo` æ¯å½æ°å£°æï¼è䏿¯å½æ°è¡¨è¾¾å¼
foo();
export default function foo() {
console.log("Hi");
}
// 仿æ¯ä¸è®²ï¼å®ä»ç¶æ¯ä¸ä¸ªå£°æï¼ä½å
许å¿å
export default function () {
console.log("Hi");
}
å
·å导åºå¨éè¦å¯¼åºå¤ä¸ªå¼æ¶é常æç¨ã导å
¥æ¤æ¨¡åæ¶ï¼å
·å导åºå¿
须使ç¨å®å
¨ç¸åçåç§°ï¼å¯éæ©ç¨ as
éå½åï¼ï¼ä½é»è®¤å¯¼åºå¯ä»¥ä½¿ç¨ä»»ä½å称导å
¥ãä¾å¦ï¼
// test.js æä»¶
const k = 12;
export default k;
// å
¶ä»æä»¶
import m from "./test"; // 请注æï¼æä»¬å¯ä»¥èªç±å°ä½¿ç¨ import m è䏿¯ import kï¼å 为 k æ¯é»è®¤å¯¼åº
console.log(m); // 12
ä½ è¿å¯ä»¥å¯¹å ·å导åºè¿è¡éå½åï¼ä»¥é¿å å½åå²çªï¼
export { myFunction as function1, myVariable as variable };
ä½ å¯ä»¥ä½¿ç¨å符串åé¢éå°åç§°éå½åä¸ºéæææ è¯ç¬¦ãä¾å¦ï¼
export { myFunction as "my-function" };
é导åº/èå
模åè¿å¯ä»¥âä¸ç»§âä»å ¶ä»æ¨¡å导åºçå¼ï¼èæ éç¼å两æ¡åç¬çå¯¼å ¥å导åºè¯å¥ãè¿å¨å建ä¸ä¸ªéä¸äºæ¥èªä¸å模åçåç§å¯¼åºå¼çå䏿¨¡åï¼éå¸¸ç§°ä¸ºâæ¡¶æ¨¡åâï¼æ¶é常é常æç¨ã
è¿ä¸ªå¯ä»¥ä½¿ç¨âexport fromâè¯æ³å®ç°ï¼
export { default as function1, function2 } from "bar.js";
è¿ç±»ä¼¼äº import å export çç»åï¼åªæ¯ function1
å function2
ä¸ä¼å¨å½å模åä¸å¯ç¨ï¼
import { default as function1, function2 } from "bar.js";
export { function1, function2 };
大夿°âimport fromâè¯æ³é½æå¯¹åºçâexport fromâè¯æ³ã
export { x } from "mod";
export { x as v } from "mod";
export * as ns from "mod";
è½ç¶æ²¡æ import * from "mod"
ï¼ä½ä¹æ export * from "mod"
ãè¿ä¼å° mod
ä¸çææå
·å导åºéæ°å¯¼åºä¸ºå½å模åçå
·å导åºï¼ä½ mod
çé»è®¤å¯¼åºä¸ä¼è¢«éæ°å¯¼åºã妿æä¸¤ä¸ªéé
符导åºè¯å¥éå¼å°éæ°å¯¼åºäºç¸åçåç§°ï¼åè¿ä¸¤ä¸ªè¯å¥é½ä¸ä¼è¢«éæ°å¯¼åºã
// -- mod1.js --
export const a = 1;
// -- mod2.js --
export const a = 3;
// -- barrel.js --
export * from "./mod1.js";
export * from "./mod2.js";
// -- main.js --
import * as ns from "./barrel.js";
console.log(ns.a); // undefined
妿è¯å¾ç´æ¥å¯¼å ¥éå¤çåç§°ï¼å伿åºéã
import { a } from "./barrel.js";
// SyntaxError: The requested module './barrel.js' contains conflicting star exports for name 'a'
ä¸é¢çè¯æ³æ æï¼å°½ç®¡å ¶å¯¼å ¥çæï¼
export DefaultExport from "bar.js"; // æ æ
æ£ç¡®çåæ³æ¯éæ°å½åè¿ä¸ªå¯¼åºï¼
export { default as DefaultExport } from "bar.js";
âexport fromâè¯æ³å
许çç¥ as
æ è®°ï¼è¿ä½¿å¾é»è®¤å¯¼åºä»ä½ä¸ºé»è®¤å¯¼åºéæ°å¯¼åºã
export { default, function2 } from "bar.js";
ç¤ºä¾ ä½¿ç¨å
·å导åº
卿¨¡å my-module.js
ä¸ï¼å¯è½å
å«ä»¥ä¸ä»£ç ï¼
// module "my-module.js"
function cube(x) {
return x * x * x;
}
const foo = Math.PI + Math.SQRT2;
const graph = {
options: {
color: "white",
thickness: "2px",
},
draw() {
console.log("æ¥èª graph draw function");
},
};
export { cube, foo, graph };
ç¶åï¼å¨ä½ ç HTML 页é¢ç顶级模åä¸ï¼
import { cube, foo, graph } from "my-module.js";
graph.options = {
color: "blue",
thickness: "3px",
};
graph.draw(); // æ¥å¿ï¼"æ¥èª graph draw function"
console.log(cube(3)); // 27
console.log(foo); // 4.555806215962888
çéæ³¨æä»¥ä¸å ç¹ï¼
<script>
å
ç´ è¿æ ·çèæ¬ï¼ä»¥ä¾¿å®è¢«è¯å«ä¸ºæ¨¡åå¹¶æ£ç¡®å¤çfile://
URL è¿è¡ JS 模å â è¿å°å¯¼è´ CORS é误ãä½ éè¦éè¿ HTTP æå¡å¨è¿è¡ã妿æä»¬è¦å¯¼åºä¸ä¸ªå¼æå¾å°æ¨¡åä¸çè¿åå¼ï¼å°±å¯ä»¥ä½¿ç¨é»è®¤å¯¼åºï¼
// module "my-module.js"
export default function cube(x) {
return x * x * x;
}
ç¶åï¼å¨å¦ä¸ä¸ªèæ¬ä¸ï¼å¯ä»¥ç´æ¥å¯¼å ¥é»è®¤å¯¼åºï¼
import cube from "./my-module.js";
console.log(cube(3)); // 27
模åéå®å
举个ä¾åï¼å妿们æå¦ä¸å±æ¬¡ç»æï¼
childModule1.js
: å¯¼åº myFunction
å myVariable
childModule2.js
: å¯¼åº myClass
parentModule.js
: ä½ä¸ºèåå¨ï¼ä¸åå
¶ä»äºæ
ï¼parentModule.js
ç导åºé¡¹ä½ ç代ç çèµ·æ¥åºè¯¥åè¿æ ·ï¼
// childModule1.js ä¸
function myFunction() {
console.log("Hello!");
}
const myVariable = 1;
export { myFunction, myVariable };
// childModule2.js ä¸
class MyClass {
constructor(x) {
this.x = x;
}
}
export { MyClass };
// parentModule.js ä¸
// ä»
ä»
èå childModule1 å childModule2 ä¸ç导åº
// 以鿰坼åºä»ä»¬
export { myFunction, myVariable } from "childModule1.js";
export { MyClass } from "childModule2.js";
// 顶屿¨¡åä¸
// æä»¬å¯ä»¥ä»å个模åè°ç¨ææå¯¼åºï¼å 为 parentModule äºå
// å·²ç»å°ä»ä»¬âæ¶éâ/âæå
âå°ä¸èµ·
import { myFunction, myVariable, myClass } from "parentModule.js";
è§è æµè§å¨å
¼å®¹æ§ åè§
import
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