5. 导入导出更多信息
5.1. 导入
ECMAScript 6 提供了以下的导入方式:
-
// 定义式导出和命名式导出
-
import theDefault, { named1, named2 } from 'src/mylib';
-
import theDefault from 'src/mylib';
-
import { named1, named2 } from 'src/mylib';
-
-
// 重命名:导入named1 作为 myNamed1
-
import { named1 as myNamed1, named2 } from 'src/mylib';
-
-
// 作为兑现导入模块(每个命名式导出均作为一个属性)
-
import * as mylib from 'src/mylib';
-
-
// 仅仅加载模块而不导出
-
import 'src/mylib'
5.2. 导出
在当前模块内部有两种方式导出。一种就是以关键字 export 标记导出。
-
export var myVar1 = ...;
-
export let myVar2 = ...;
-
export const myVar3 = ...;
-
-
export function myFunc(){ ... }
-
export function* myGeneratorFunc(){ ... }
-
export class MyClass{ ... }
操作符 default 导出的是表达式(包括函数表达式,类表达式)。例如:
-
export default 123;
-
export default function (x){
-
return x;
-
}
-
export default x => x;
-
export default class{
-
constructor( x, y ){
-
this.x = x;
-
this.y = y;
-
}
-
}
另一种方式就是将所有你想导出的列出来放置在模块最下方(风格与模块模式比较类似)。
-
const MY_CONST = ... ;
-
function myFunc(){
-
...
-
}
-
-
export { MY_CONST, myFunc };
也可以使用不同的名称导出:
-
export { MY_CONST as THE_CONST, myFunc as theFunc };
记住不能使用保留字作为变量名称(如 default 和 new),却可以作为导出名称来使用(在 ECMAScript 5 中也可以将其作为属性名称来使用)。如果你是直接导入这些命名式导出,那么你就需要使用变量名称来重命名。
5.3. 重导出
重导出意味着你在当前模块添加另一个模块的导出。你可以看添加所有的模块导出。
-
export * from 'src/other_moule';
或者你可以添加选着(通过重命名):
-
export { foo, bar } from 'src/other_moule';
-
// 以 myFoo 来导出模块 other_module 的 foo
-
export { foo as myFoo, bar } from 'src/other_moule';
6. 模块的元数据
ECMAScript 6 也提供了在模块内部访问当前模块数据的方式(比如模块的 URL),如下:
-
import { url } from this module;
-
console.log( url );
this module 表示一个简单的作为一个模块导入元数据的标识。它也可以作为模块元数据。
也可以通过对象来访问元数据:
-
import * as metaData from this module;
-
console.log( metaData.url );
Node.js 使用模块局部变量 __fileName 来作为这类元数据。
7. eval() 和 模块
eval() 不支持模块语法。它将参数按照脚本语法规则解析,而脚本是不支持模块语法的(稍后说明原因)。如果你想运行模块代码,你可以使用模块加载器的API(稍后说明)。
8. ECMAScript 6 模块加载器 API
除了定义了模块语法的工作之外,还有一个编程式的API,它可以使:
1. 编程式的使用模块和脚本
2. 配置模块加载。
加载器解决了模块修饰符(在 import... from 后面的字符串 ID)的加载模块。构造函数是 Reflect.Loader 。每个平台都有其自己特定的全局变量 System(系统加载器),实现其平台特定的模块加载方式。
8.1. 导入模块和加载脚本
你可以通过 ES6 promises 式的 API,编程式的导入一个模块:
-
System.import( 'some_moule' )
-
.then( some_module => {
-
...
-
} )
-
.catch( error => {
-
...
-
} )
System.import() 使你可以:
1. 在
阅读(3963) | 评论(0) | 转发(0) |