(1)命名式導(dǎo)出
//lib.js
export constsqrt=Math.sqrt;
export function square(x){
return x*x;
};
export function diag(x,y){
return sqrt(square(x)+square(y));
};
//相當(dāng)于
//export {constsqrt, square, diag};
//main.js
import {square, diag} from 'lib'; //只導(dǎo)入square和diag
console.log(square(11)); //121
console.log(diag(3, 4)); //5
(2)導(dǎo)入整個(gè)模塊
//main.js
import * as lib from 'lib';
console.log(lib.square(11)); //121
console.log(lib.diag(3, 4)); //5
注:
方括號(hào)語法也是可以的,lib['square'](11)。
(3)默認(rèn)導(dǎo)出
導(dǎo)出函數(shù):
//myFunc.js
export default function(){};
//main.js
import abc from 'myFunc'; //導(dǎo)入"默認(rèn)導(dǎo)出"不用加花括號(hào){abc}
導(dǎo)出類:
//MyClass.js
export default class {};
//main.js
import ABC from 'MyClass'; //導(dǎo)入"默認(rèn)導(dǎo)出"不用加花括號(hào){ABC}
注:
默認(rèn)導(dǎo)出一般是沒有名字的,默認(rèn)導(dǎo)出的操作數(shù)應(yīng)該是表達(dá)式。
(4)同時(shí)進(jìn)行命名導(dǎo)出和默認(rèn)導(dǎo)出
//underscore.js
export default function(obj){};
export function each(obj,iterator,context){};
export { each as forEach };
//main.js
import _, { forEach } from 'underscore'; //花括號(hào)外接收的是"默認(rèn)導(dǎo)出",花括號(hào)內(nèi)的是"命名導(dǎo)出"
注:
默認(rèn)導(dǎo)出不過是一種命名為default的導(dǎo)出方式。
export default 123;
<=>
const D = 123;
export { D as default };
import foo from 'lib';
<=>
import { default as foo } from 'lib';
(5)總結(jié),導(dǎo)入方式
對(duì)于默認(rèn)導(dǎo)出和命名導(dǎo)出
import theDefault, { named1, named2 } from 'src/mylib';
import theDefault from 'src/mylib';
import { named1, named2 } from 'src/mylib';
更名
import { named1 as myNamed1, named2 } from 'src/mylib';
導(dǎo)入整個(gè)模塊
import * as mylib from 'src/mylib';
只載入模塊,不導(dǎo)入任何東西
import 'src/mylib';
(6)總結(jié),導(dǎo)出方式
命名導(dǎo)出
export var myVar1=...;
export let myVar2=...;
export const MY_CONST=...;
export function myFunc(){};
export function* myGeneratorFunc(){};
export class MyClass(){};
默認(rèn)導(dǎo)出
export default 123;
export default function(){};
export default x=>x;
export default class{};
模塊末尾導(dǎo)出
const MY_CONST=...;
function myFunc(){}
export { MY_CONST, myFunc };
更名
export { MY_CONST as THE_CONST, myFunc as theFunc };
導(dǎo)出引用
export * from 'src/other_module';
export { foo, bar } from 'src/other_module';
export { foo as myFoo, bar } from 'src/other_module';
(7)動(dòng)態(tài)導(dǎo)入
System.import('some_module')
.then(some_module=>{
//use the module
})
.catch(error=>{
});
注:
System.import只能讀取單個(gè)模塊,可以使用Promise.all導(dǎo)入多個(gè)模塊。
Promise.all(['module1', 'module2', 'module3'].map(x=>System.import(x)))
.then(([module1, module2, module3])=>{
//use module1, module2, module3
});