export是我们接触最多的一个js关键字了。每个js文件要供其他文件使用,都需要导出自己。被导出的对象可以是:函数,类以及var、let或const声明的变量。
一个js文件可以有多个export语句:
1
2
3
4
5
6
7
8
9
10
11
12//------ lib.js ------
export const sqrt = Math.sqrt;
export function square(x) {
return x * x;
}
export function add (x, y) {
return x + y;
}
//------ main.js ------
import { square, add } from 'lib';
console.log(square(10)); //100一个js文件可以用一个export导出多个对象
1
2
3
4
5
6
7
8
9//------ lib.js ------
const sqrt = Math.sqrt;
function square(x) {
return x * x;
}
function add (x, y) {
return x + y;
}
export {sqrt, square, add}
可以直接导入整个模块,此时的main.js模块将变成这样1
2
3
4//------ main.js ------
import * as lib from 'lib';
console.log(lib.square(10)); //100
console.log(lib.add(2,4)); //6
- 一个模块(一个js文件)只可以有一个默认导出:
1
2
3
4
5
6//------ myFunc.js ------
export default function() {...};
//------ main.js ------
import myFunc from 'myFunc';
myFunc();
但可以有多个export:1
2
3
4
5
6//------ lib.js ------
export default function() {...};
export function each() {...};
//------ main.js ------
import _,{ each } from 'lib';
为了解决导出命名冲突的问题,ES6为你提供了重命名的方法解决这个问题,当你在导入名称时可以这样做
1
2
3
4// 这两个模块都会导出以`flip`命名的东西。
// 要同时导入两者,我们至少要将其中一个的名称改掉。
import {flip as flipOmelet} from "eggs.js";
import {flip as flipHouse} from "real-estate.js";同样,当你在导出的时候也可以重命名。你可能会想用两个不同的名称导出相同的值,这样的情况偶尔也会遇到:
1
2
3
4
5
6
7
8function v1() { ... }
function v2() { ... }
export {
v1 as streamV1,
v2 as streamV2,
v2 as streamLatestVersion
};对于默认导出,只是导出了一个特殊的名字叫 default,你也可以就直接用他的名字,把它当做命名导出来用,下面两种写法是等价的:
1
2import { default as foo } from 'lib';
import foo from 'lib';作为中转模块导出: 有时候为了避免上层模块导入太多的模块,我们可能使用底层模块作为中转,直接导出另一个模块的内容如下:
1
2
3
4
5
6
7
8
9//------ myFunc.js ------
export default function() {...};
//------ lib.js ------
export * from 'myFunc';
export function each() {...};
//------ main.js ------
import myFunc,{ each } from 'lib';