导åºï¼exportï¼åå¯¼å ¥ï¼importï¼æä»¤æå ç§è¯æ³åä½ã
å¨ä¸ä¸èï¼æä»¬çå°äºä¸ä¸ªç®åçç¨æ³ï¼ç°å¨è®©æä»¬æ¥æ¢ç´¢æ´å¤ç¤ºä¾å§ã
å¨å£°æå导åº
æä»¬å¯ä»¥éè¿å¨å£°æä¹åæ¾ç½® export æ¥æ è®°ä»»æå£°æä¸ºå¯¼åºï¼æ 论声æçæ¯åéï¼å½æ°è¿æ¯ç±»é½å¯ä»¥ã
ä¾å¦ï¼è¿éçææå¯¼åºåææï¼
// å¯¼åºæ°ç»
export let months = ['Jan', 'Feb', 'Mar','Apr', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
// å¯¼åº const 声æçåé
export const MODULES_BECAME_STANDARD_YEAR = 2015;
// 导åºç±»
export class User {
constructor(name) {
this.name = name;
}
}
注æï¼å¨ç±»æè
彿°åç export ä¸ä¼è®©å®ä»¬åæ 彿°è¡¨è¾¾å¼ã尽管被导åºäºï¼ä½å®ä»ç¶æ¯ä¸ä¸ªå½æ°å£°æã
大é¨å JavaScript æ ·å¼æåé½ä¸å»ºè®®å¨å½æ°å类声æå使ç¨åå·ã
è¿å°±æ¯ä¸ºä»ä¹å¨ export class å export function çæ«å°¾ä¸éè¦å åå·ï¼
export function sayHi(user) {
alert(`Hello, ${user}!`);
} // å¨è¿é没æåå· ;
导åºä¸å£°æåå¼
å¦å¤ï¼æä»¬è¿å¯ä»¥å° export å弿¾ç½®ã
ä¸é¢çä¾åä¸ï¼æä»¬å 声æå½æ°ï¼ç¶åå导åºå®ä»¬ï¼
// ð say.js
function sayHi(user) {
alert(`Hello, ${user}!`);
}
function sayBye(user) {
alert(`Bye, ${user}!`);
}
export {sayHi, sayBye}; // 导åºåéå表
â¦â¦ä»ææ¯ä¸è®²ï¼æä»¬ä¹å¯ä»¥æ export æ¾å¨å½æ°ä¸é¢ã
Import *
éå¸¸ï¼æä»¬æè¦å¯¼å
¥çä¸è¥¿åå¨è±æ¬å· import {...} ä¸ï¼å°±åè¿æ ·ï¼
// ð main.js
import {sayHi, sayBye} from './say.js';
sayHi('John'); // Hello, John!
sayBye('John'); // Bye, John!
使¯å¦ææå¾å¤è¦å¯¼å
¥çå
å®¹ï¼æä»¬å¯ä»¥ä½¿ç¨ import * as <obj> å°ææå
容导å
¥ä¸ºä¸ä¸ªå¯¹è±¡ï¼ä¾å¦ï¼
// ð main.js
import * as say from './say.js';
say.sayHi('John');
say.sayBye('John');
ä¹ä¸çï¼âééå¯¼å ¥âçèµ·æ¥å¾é ·ï¼åèµ·æ¥ä¹å¾çï¼ä½æ¯æä»¬é常为ä»ä¹è¦æç¡®ååºæä»¬éè¦å¯¼å ¥çå 容ï¼
è¿éæå 个åå ã
-
ç°ä»£çæå»ºå·¥å ·ï¼webpack åå ¶ä»å·¥å ·ï¼å°æ¨¡åæå å°ä¸èµ·å¹¶å¯¹å ¶è¿è¡ä¼åï¼ä»¥å å¿«å è½½é度并å 餿ªä½¿ç¨ç代ç ã
æ¯å¦è¯´ï¼æä»¬åæä»¬ç项ç®éæ·»å ä¸ä¸ªç¬¬ä¸æ¹åº
say.jsï¼å®å ·æè®¸å¤å½æ°ï¼// ð say.js export function sayHi() { ... } export function sayBye() { ... } export function becomeSilent() { ... }ç°å¨ï¼å¦ææä»¬åªå¨æä»¬ç项ç®é使ç¨äº
say.jsä¸çä¸ä¸ªå½æ°ï¼// ð main.js import {sayHi} from './say.js';â¦â¦é£ä¹ï¼ä¼åå¨ï¼optimizerï¼å°±ä¼æ£æµå°å®ï¼å¹¶ä»æå 好ç代ç ä¸å é¤é£äºæªè¢«ä½¿ç¨ç彿°ï¼ä»è使æå»ºæ´å°ãè¿å°±æ¯æè°çâææ ï¼tree-shakingï¼âã
-
æç¡®ååºè¦å¯¼å ¥çå 容ä¼ä½¿å¾åç§°è¾çï¼
sayHi()è䏿¯say.sayHi()ã -
å¯¼å ¥çæ¾å¼å表å¯ä»¥æ´å¥½å°æ¦è¿°ä»£ç ç»æï¼ä½¿ç¨çå 容åä½ç½®ãå®ä½¿å¾ä»£ç æ¯æéæï¼å¹¶ä¸éæèµ·æ¥æ´å®¹æã
Import âasâ
æä»¬ä¹å¯ä»¥ä½¿ç¨ as 让导å
¥å
·æä¸åçååã
ä¾å¦ï¼ç®æ´èµ·è§ï¼æä»¬å° sayHi 导å
¥å°å±é¨åé hiï¼å° sayBye 导å
¥å° byeï¼
// ð main.js
import {sayHi as hi, sayBye as bye} from './say.js';
hi('John'); // Hello, John!
bye('John'); // Bye, John!
Export âasâ
导åºä¹å ·æç±»ä¼¼çè¯æ³ã
æä»¬å°å½æ°å¯¼åºä¸º hi å byeï¼
// ð say.js
...
export {sayHi as hi, sayBye as bye};
ç°å¨ hi å bye æ¯å¨å¤é¢ä½¿ç¨æ¶çæ£å¼åç§°ï¼
// ð main.js
import * as say from './say.js';
say.hi('John'); // Hello, John!
say.bye('John'); // Bye, John!
Export default
å¨å®é ä¸ï¼ä¸»è¦æä¸¤ç§æ¨¡åã
- å
å«åºæå½æ°å
çæ¨¡åï¼åä¸é¢ç
say.jsã - 声æå个å®ä½ç模åï¼ä¾å¦æ¨¡å
user.jsä» å¯¼åºclass Userã
大é¨åæ åµä¸ï¼å¼åè å¾åäºä½¿ç¨ç¬¬äºç§æ¹å¼ï¼ä»¥ä¾¿æ¯ä¸ªâä¸è¥¿âé½åå¨äºå®èªå·±ç模åä¸ã
å½ç¶ï¼è¿éè¦å¤§éæä»¶ï¼å 为æ¯ä¸ªä¸è¥¿é½éè¦èªå·±ç模åï¼ä½è¿æ ¹æ¬ä¸æ¯é®é¢ãå®é ä¸ï¼å¦ææä»¶å ·æè¯å¥½çå½åï¼å¹¶ä¸æä»¶å¤¹ç»æå¾å½ï¼é£ä¹ä»£ç 导èªï¼navigationï¼ä¼å徿´å®¹æã
模åæä¾äºä¸ä¸ªç¹æ®çé»è®¤å¯¼åº export default è¯æ³ï¼ä»¥ä½¿âä¸ä¸ªæ¨¡ååªåä¸ä»¶äºâçæ¹å¼çèµ·æ¥æ´å¥½ã
å° export default æ¾å¨è¦å¯¼åºçå®ä½åï¼
// ð user.js
export default class User { // åªéè¦æ·»å "default" å³å¯
constructor(name) {
this.name = name;
}
}
æ¯ä¸ªæä»¶åºè¯¥åªæä¸ä¸ª export defaultï¼
â¦â¦ç¶åå°å ¶å¯¼å ¥èä¸éè¦è±æ¬å·ï¼
// ð main.js
import User from './user.js'; // ä¸éè¦è±æ¬å· {User}ï¼åªéè¦åæ User å³å¯
new User('John');
ä¸ç¨è±æ¬å·ç导å
¥çèµ·æ¥å¾é
·ãåå¼å§ä½¿ç¨æ¨¡åæ¶ï¼ä¸ä¸ªå¸¸è§çé误就æ¯å¿è®°åè±æ¬å·ãæä»¥ï¼è¯·è®°ä½ï¼import å½åçå¯¼åºæ¶éè¦è±æ¬å·ï¼è import é»è®¤çå¯¼åºæ¶ä¸éè¦è±æ¬å·ã
| å½åçå¯¼åº | é»è®¤çå¯¼åº |
|---|---|
export class User {...} |
export default class User {...} |
import {User} from ... |
import User from ... |
仿æ¯ä¸è®²ï¼æä»¬å¯ä»¥å¨ä¸ä¸ªæ¨¡åä¸åæ¶æé»è®¤ç导åºåå½åç导åºï¼ä½æ¯å®é ä¸äººä»¬é常ä¸ä¼æ··å使ç¨å®ä»¬ã模åè¦ä¹æ¯å½åç导åºè¦ä¹æ¯é»è®¤ç导åºã
ç±äºæ¯ä¸ªæä»¶æå¤åªè½æä¸ä¸ªé»è®¤ç导åºï¼å æ¤å¯¼åºçå®ä½å¯è½æ²¡æåç§°ã
ä¾å¦ï¼ä¸é¢è¿äºé½æ¯å®å ¨ææçé»è®¤ç导åºï¼
export default class { // 没æç±»å
constructor() { ... }
}
export default function(user) { // 没æå½æ°å
alert(`Hello, ${user}!`);
}
// 导åºå个å¼ï¼èä¸ä½¿ç¨åé
export default ['Jan', 'Feb', 'Mar','Apr', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
䏿å®åç§°æ¯å¯ä»¥çï¼å 为æ¯ä¸ªæä»¶åªæä¸ä¸ª export defaultï¼å æ¤ä¸å¸¦è±æ¬å·ç import ç¥éè¦å¯¼å
¥çå
容æ¯ä»ä¹ã
å¦ææ²¡æ defaultï¼è¿æ ·ç导åºå°ä¼åºéï¼
export class { // Error!ï¼éé»è®¤ç导åºéè¦åç§°ï¼
constructor() {}
}
âdefaultâ åç§°
å¨æäºæ
åµä¸ï¼default å
³é®è¯è¢«ç¨äºå¼ç¨é»è®¤ç导åºã
ä¾å¦ï¼è¦å°å½æ°ä¸å ¶å®ä¹åå¼å¯¼åºï¼
function sayHi(user) {
alert(`Hello, ${user}!`);
}
// å°±åæä»¬å¨å½æ°ä¹åæ·»å äº "export default" 䏿 ·
export {sayHi as default};
æè
ï¼å¦ä¸ç§æ
åµï¼å设模å user.js 导åºäºä¸ä¸ªä¸»è¦çé»è®¤ç导åºåä¸äºå½åç导åºï¼è¿ç§æ
åµå¾å°è§ï¼ä½ç¡®å®ä¼åçï¼ï¼
// ð user.js
export default class User {
constructor(name) {
this.name = name;
}
}
export function sayHi(user) {
alert(`Hello, ${user}!`);
}
è¿æ¯å¯¼å ¥é»è®¤ç导åºä»¥åå½åç导åºçæ¹æ³ï¼
// ð main.js
import {default as User, sayHi} from './user.js';
new User('John');
妿æä»¬å°ææä¸è¥¿ * ä½ä¸ºä¸ä¸ªå¯¹è±¡å¯¼å
¥ï¼é£ä¹ default 屿§æ£æ¯é»è®¤ç导åºï¼
// ð main.js
import * as user from './user.js';
let User = user.default; // é»è®¤ç导åº
new User('John');
æåºè¯¥ä½¿ç¨é»è®¤ç导åºåï¼
å½åçå¯¼åºæ¯æç¡®çãå®ä»¬ç¡®åå°å½åäºå®ä»¬è¦å¯¼åºçå 容ï¼å æ¤æä»¬è½ä»å®ä»¬è·å¾è¿äºä¿¡æ¯ï¼è¿æ¯ä¸ä»¶å¥½äºã
å½åç导åºä¼å¼ºå¶æä»¬ä½¿ç¨æ£ç¡®çåç§°è¿è¡å¯¼å ¥ï¼
import {User} from './user.js';
// 导å
¥ {MyUser} ä¸èµ·ä½ç¨ï¼å¯¼å
¥ååå¿
须为 {User}
â¦â¦å¯¹äºé»è®¤ç导åºï¼æä»¬æ»æ¯å¨å¯¼å ¥æ¶éæ©åç§°ï¼
import User from './user.js'; // ææ
import MyUser from './user.js'; // 乿æ
// 使ç¨ä»»ä½å称导å
¥é½æ²¡æé®é¢
å æ¤ï¼å¢éæåå¯è½ä¼ä½¿ç¨ä¸åçåç§°æ¥å¯¼å ¥ç¸åçå 容ï¼è¿ä¸å¥½ã
é常ï¼ä¸ºäºé¿å è¿ç§æ åµå¹¶ä½¿ä»£ç ä¿æä¸è´ï¼å¯ä»¥éµä»è¿æ¡è§åï¼å³å¯¼å ¥çåéåºä¸æä»¶åç¸å¯¹åºï¼ä¾å¦ï¼
import User from './user.js';
import LoginForm from './loginForm.js';
import func from '/path/to/func.js';
...
使¯ï¼ä¸äºå¢éä»ç¶è®¤ä¸ºè¿æ¯é»è®¤ç导åºç严é缺é·ãå æ¤ï¼ä»ä»¬æ´å¾åäºå§ç»ä½¿ç¨å½åç导åºãå³ä½¿åªå¯¼åºä¸ä¸ªä¸è¥¿ï¼ä¹ä»ç¶ä½¿ç¨å½åç导åºï¼è䏿¯é»è®¤ç导åºã
è¿ä¹ä½¿å¾éæ°å¯¼åºï¼è§ä¸æï¼æ´å®¹æã
鿰坼åº
â鿰坼åºï¼Re-exportï¼âè¯æ³ export ... from ... å
许导å
¥å
容ï¼å¹¶ç«å³å°å
¶å¯¼åºï¼å¯è½æ¯ç¨çæ¯å
¶ä»çååï¼ï¼å°±åè¿æ ·ï¼
export {sayHi} from './say.js'; // éæ°å¯¼åº sayHi
export {default as User} from './user.js'; // éæ°å¯¼åº default
为ä»ä¹è¦è¿æ ·åï¼æä»¬çä¸ä¸ªå®é å¼åä¸çç¨ä¾ã
æ³è±¡ä¸ä¸ï¼æä»¬æ£å¨ç¼åä¸ä¸ª âpackageâï¼ä¸ä¸ªå å«å¤§é模åçæä»¶å¤¹ï¼å ¶ä¸ä¸äºåè½æ¯å¯¼åºå°å¤é¨çï¼å NPM è¿æ ·çå·¥å ·å 许æä»¬åå¸åååè¿æ ·ç packageï¼ä½æä»¬ä¸æ¯å¿ é¡»è¦å»ä½¿ç¨å®ä»¬ï¼ï¼å¹¶ä¸å ¶ä¸ä¸äºæ¨¡åä» ä» æ¯ä¾å ¶ä» package ä¸ç模åå é¨ä½¿ç¨ç âhelpersâã
æä»¶ç»æå¯è½æ¯è¿æ ·çï¼
auth/
index.js
user.js
helpers.js
tests/
login.js
providers/
github.js
facebook.js
...
æä»¬å¸æéè¿åä¸ªå ¥å£æ´é²å çåè½ã
æ¢å¥è¯è¯´ï¼æ³è¦ä½¿ç¨æä»¬çå
ç人ï¼åºè¯¥åªä»â主æä»¶â auth/index.js 导å
¥ã
åè¿æ ·ï¼
import {login, logout} from 'auth/index.js'
â主æä»¶âï¼auth/index.js 导åºäºæä»¬å¸æå¨å
䏿ä¾çææåè½ã
è¿æ ·åæ¯å 为ï¼å
¶ä»ä½¿ç¨æä»¬å
çå¼åè
ä¸åºè¯¥å¹²é¢å
¶å
é¨ç»æï¼ä¸åºè¯¥æç´¢æä»¬å
çæä»¶å¤¹ä¸çæä»¶ãæä»¬åªå¨ auth/index.js ä¸å¯¼åºå¿
è¦çé¨åï¼å¹¶ä¿æå
¶ä»å
容âä¸å¯è§âã
ç±äºå®é
导åºçåè½åæ£å¨ package ä¸ï¼æä»¥æä»¬å¯ä»¥å°å®ä»¬å¯¼å
¥å° auth/index.jsï¼ç¶ååä»ä¸å¯¼åºå®ä»¬ï¼
// ð auth/index.js
// 导å
¥ login/logout ç¶åç«å³å¯¼åºå®ä»¬
import {login, logout} from './helpers.js';
export {login, logout};
// å°é»è®¤å¯¼åºå¯¼å
¥ä¸º Userï¼ç¶å导åºå®
import User from './user.js';
export {User};
...
ç°å¨ä½¿ç¨æä»¬ package ç人å¯ä»¥ import {login} from "auth/index.js"ã
è¯æ³ export ... from ... åªæ¯ä¸é¢è¿ç§å¯¼å
¥-导åºçç®åï¼
// ð auth/index.js
// éæ°å¯¼åº login/logout
export {login, logout} from './helpers.js';
// å°é»è®¤å¯¼åºéæ°å¯¼åºä¸º User
export {default as User} from './user.js';
...
export ... from ä¸ import/export ç¸æ¯çæ¾çåºå«æ¯éæ°å¯¼åºç模åå¨å½åæä»¶ä¸ä¸å¯ç¨ãæä»¥å¨ä¸é¢ç auth/index.js 示ä¾ä¸ï¼æä»¬ä¸è½ä½¿ç¨éæ°å¯¼åºç login/logout 彿°ã
鿰坼åºé»è®¤å¯¼åº
éæ°å¯¼åºæ¶ï¼é»è®¤å¯¼åºéè¦åç¬å¤çã
å设æä»¬æä¸ä¸ª user.js èæ¬ï¼å
¶ä¸åäº export default class Userï¼å¹¶ä¸æä»¬æ³éæ°å¯¼åºç±» Userï¼
// ð user.js
export default class User {
// ...
}
æä»¬å¯è½ä¼éå°ä¸¤ä¸ªé®é¢ï¼
-
export User from './user.js'æ æãè¿ä¼å¯¼è´ä¸ä¸ªè¯æ³é误ãè¦éæ°å¯¼åºé»è®¤å¯¼åºï¼æä»¬å¿ é¡»æç¡®ååº
export {default as User}ï¼å°±åä¸é¢çä¾åä¸é£æ ·ã -
export * from './user.js'鿰坼åºåªå¯¼åºäºå½åç导åºï¼ä½æ¯å¿½ç¥äºé»è®¤ç导åºã妿æä»¬æ³å°å½åç导åºåé»è®¤ç导åºé½éæ°å¯¼åºï¼é£ä¹éè¦ä¸¤æ¡è¯å¥ï¼
export * from './user.js'; // 鿰坼åºå½åçå¯¼åº export {default} from './user.js'; // 鿰坼åºé»è®¤ç导åº
鿰坼åºä¸ä¸ªé»è®¤å¯¼åºçè¿ç§å¥æªç°è±¡ï¼æ¯æäºå¼åè ä¸å欢é»è®¤å¯¼åºï¼èæ¯å欢å½åç导åºçåå ä¹ä¸ã
æ»ç»
è¿æ¯æä»¬å¨æ¬èååé¢ç« èä¸ä»ç»çææ export ç±»åï¼
ä½ å¯ä»¥é 读并åå¿å®ä»¬çå«ä¹æ¥è¿è¡èªæ¥ï¼
- å¨å£°æä¸ä¸ª class/function/⦠ä¹åï¼
export [default] class/function/variable ...
- ç¬ç«ç导åºï¼
export {x [as y], ...}.
- 鿰坼åºï¼
export {x [as y], ...} from "module"export * from "module"ï¼ä¸ä¼éæ°å¯¼åºé»è®¤ç导åºï¼ãexport {default [as y]} from "module"ï¼éæ°å¯¼åºé»è®¤ç导åºï¼ã
å¯¼å ¥ï¼
- 导å
¥å½åç导åºï¼
import {x [as y], ...} from "module"
- 导å
¥é»è®¤ç导åºï¼
import x from "module"import {default as x} from "module"
- 导å
¥ææï¼
import * as obj from "module"
- 导å
¥æ¨¡åï¼å
¶ä»£ç ï¼å¹¶è¿è¡ï¼ï¼ä½ä¸è¦å°å
¶ä»»ä½å¯¼åºèµå¼ç»åéï¼
import "module"
æä»¬æ import/export è¯å¥æ¾å¨èæ¬ç顶鍿åºé¨ï¼é½æ²¡å
³ç³»ã
å æ¤ï¼ä»ææ¯ä¸è®²ï¼ä¸é¢è¿æ ·çä»£ç æ²¡æé®é¢ï¼
sayHi();
// ...
import {sayHi} from './say.js'; // 卿件åºé¨å¯¼å
¥
å¨å®é å¼åä¸ï¼å¯¼å ¥é常ä½äºæä»¶çå¼å¤´ï¼ä½æ¯è¿åªæ¯ä¸ºäºæ´å æ¹ä¾¿ã
请注æå¨ {...} ä¸ç import/export è¯å¥æ æã
åè¿æ ·çææ¡ä»¶çå¯¼å ¥æ¯æ æçï¼
if (something) {
import {sayHi} from "./say.js"; // Error: import must be at top level
}
â¦â¦ä½æ¯ï¼å¦ææä»¬ççéè¦æ ¹æ®æäºæ¡ä»¶æ¥è¿è¡å¯¼å ¥å¢ï¼æè 卿äºåéçæ¶é´ï¼ä¾å¦ï¼æ ¹æ®è¯·æ±ï¼requestï¼å 载模åï¼ä»ä¹æ¶åææ¯çæ£éè¦å¢ï¼
æä»¬å°å¨ä¸ä¸ç« èä¸å¦ä¹ å¨æå¯¼å ¥ã
è¯è®º
<code>æ ç¾æå ¥åªæå 个è¯ç代ç ï¼æå ¥å¤è¡ä»£ç å¯ä»¥ä½¿ç¨<pre>æ ç¾ï¼å¯¹äºè¶ è¿ 10 è¡ç代ç ï¼å»ºè®®ä½ ä½¿ç¨æ²ç®±ï¼plnkrï¼JSBinï¼codepenâ¦ï¼