Chinaunix首页 | 论坛 | 博客
  • 博客访问: 11749
  • 博文数量: 11
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 144
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-20 11:02
文章分类
文章存档

2014年(3)

2013年(8)

我的朋友

分类: 其他平台

2013-09-08 11:44:43

  

任何平台的其中一个重要特性,除了需要支持代码库外就是模块。直到现在,Javascript还不支持原生的模块化。结果是,各种解决方案都将模块添加到类库中,比如CommonJS modules(部分由node.js实现)和require.js。然而,作为下一代的Javascript(官方称为ECMAScript 6),模块终于被作为重要组成部分加入其中。Axel Rauschmayer写了一篇介绍ECMAScript 6模块的文章,解析了它们是什么以及如何使用,并且如果目前想使用的话采用的方法(使用转换编译器)。 Axel指出了ES6模块的设计目标如下: ECMAScript 6 (ES6)模块的目标是创建的格式能让CJS(CommonJS规范)和AMD(Asynchronous Module Definition,异步模块定义)的用户都能满意。为此,它们的语法是CJS那样紧凑。在另一方面,它们的动态能力比不上CJS(例如,你不能用正常的语法去有条件加载模块)。这有两个主要的优点:

如果尝试导入未导出的将会得到编译时的错误 可以很容易异步导入ES6的模块。

ES6的模块标准由两部分组成:

声明式语法(导入和导出用)。 编程式API加载器:设置模块如何加载以及如何有条件地加载模块。

ES6模块不再需要开发人员去将整个JavaScript文件的尴尬地包装成一个对象或函数闭报,这和以前大多数异步模块装载器在浏览器中的做法一样。相反,可以在最顶层进行定义,而只有函数和显式定义的导出变量将可以暴露给模块的消费者:

var privateVar = "this is a variable private to the module"; export var publicVar = "and this one is public"; export function returnPrivateVar() { return privateVar; };

假设将上面的代码保存在mymodule.js中,,我们现在可以用两种方法导入,或者是通过导入指定函数和变量,或者通过导入模块作为模块的对象:

import { returnPrivateVar, publicVar } from 'mymodule'; console.log(returnPrivateVar());

或者是:

import 'mymodule' as mm; console.log(mm.returnPrivateVar());

新的模块标准也支持对模块的内嵌定义和动态模块加载。可以阅读Axel的文章也了解更多相关信息。

如果想在目前尝试新的模块语法,可以有一些方法可供选择:

es6-module-transpiler 将ES6模块编译为AMD规范或者CommonJS规范的模块 ES6 module loader 则能支持动态加载ES6风格的模块 require-hm是一个require.js的插件能支持加载ES6模块 Traceur是Google的转换编译器,目的在于支持许多Javascript的特性包括ES6模块 TypeScript是微软的可选择的Javascript的一个版本,也支持ES6模块

查看英文原文:ECMAScript 6 Modules: What Are They and How to Use Them Today

转自:q.com/cn/news/2013/08/es6-modules

阅读(221) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~