Chinaunix首页 | 论坛 | 博客
  • 博客访问: 817639
  • 博文数量: 62
  • 博客积分: 526
  • 博客等级: 二等列兵
  • 技术积分: 2078
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-04 20:41
个人简介

博客迁移至 freefe.cc

文章分类

全部博文(62)

分类: JavaScript

2014-10-14 11:28:53



5. 导入导出更多信息


    5.1. 导入

    ECMAScript 6 提供了以下的导入方式:

  1. // 定义式导出和命名式导出
  2. import theDefault, { named1, named2 } from 'src/mylib';
  3. import theDefault from 'src/mylib';
  4. import { named1, named2 } from 'src/mylib';

  5. // 重命名:导入named1 作为 myNamed1
  6. import { named1 as myNamed1, named2 } from 'src/mylib';

  7. // 作为兑现导入模块(每个命名式导出均作为一个属性)
  8. import * as mylib from 'src/mylib';

  9. // 仅仅加载模块而不导出
  10. import 'src/mylib'

    5.2. 导出

    在当前模块内部有两种方式导出。一种就是以关键字 export 标记导出。

  1. export var myVar1 = ...;
  2. export let myVar2 = ...;
  3. export const myVar3 = ...;

  4. export function myFunc(){ ... }
  5. export function* myGeneratorFunc(){ ... }
  6. export class MyClass{ ... }

    操作符 default 导出的是表达式(包括函数表达式,类表达式)。例如:

  1. export default 123;
  2. export default function (x){
  3.     return x;
  4. }
  5. export default x => x;
  6. export default class{
  7.     constructor( x, y ){
  8.         this.x = x;
  9.         this.y = y;
  10.     }
  11. }

    另一种方式就是将所有你想导出的列出来放置在模块最下方(风格与模块模式比较类似)。

  1. const MY_CONST = ... ;
  2. function myFunc(){
  3.     ...
  4. }

  5. export { MY_CONST, myFunc };

    也可以使用不同的名称导出:

  1. export { MY_CONST as THE_CONST, myFunc as theFunc };

    记住不能使用保留字作为变量名称(如 default 和 new),却可以作为导出名称来使用(在 ECMAScript 5 中也可以将其作为属性名称来使用)。如果你是直接导入这些命名式导出,那么你就需要使用变量名称来重命名。

    5.3. 重导出

    重导出意味着你在当前模块添加另一个模块的导出。你可以看添加所有的模块导出。

  1. export * from 'src/other_moule';
    
    或者你可以添加选着(通过重命名):

  1. export { foo, bar } from 'src/other_moule';
  2. // 以 myFoo 来导出模块 other_module 的 foo
  3. export { foo as myFoo, bar } from 'src/other_moule';


6. 模块的元数据

    ECMAScript 6 也提供了在模块内部访问当前模块数据的方式(比如模块的 URL),如下:

  1. import { url } from this module;
  2. console.log( url );

    this module 表示一个简单的作为一个模块导入元数据的标识。它也可以作为模块元数据。
    也可以通过对象来访问元数据:

  1. import * as metaData from this module;
  2. 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,编程式的导入一个模块:

  1. System.import( 'some_moule' )
  2. .then( some_module => {
  3.     ...
  4. } )
  5. .catch( error => {
  6.     ...
  7. } )
   
    System.import() 使你可以:
    1. 在
阅读(3955) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~