Axel Rauschmayer博士正式公布了ECMAScript 6(ES6)模块语法的最终细节。 Rauschmayer在文章“ECMAScript 6模块:最终语法”中详细描述了完整的ES6模块系统,包括ECMAScript 6模块、模块元数据和ECMAScript 6模块加载器的API等。 据Rauschmayer所述,ES6模块的目标是创建一种让CommonJS和AMD用户都感到满意的格式,由于这种模式是内置于语言之中的,因此其能力超越了CommonJS和AMD。 在ES6中有两种导出方式:命名导出(每个模块有多个导出值)和默认导出(每个模块只有一个导出值)。通过在模块声明前面加入export关键字作为前缀,一个模块就可以通过命名导出方式导出多个值,并通过不同的名称对它们进行区分。 Rauschmayer说:
ES6的默认导出是最重要的导出值,Rauschmayer称,默认导出是非常容易进行导入的。他特别提到导出单个值在前端开发中很普遍,通常的做法是每个模块对应一个模型,由构造函数/类作为其模型。 ES6还提供了在模块内获取当前模块信息(例如模块的URL)的方法。在以下实例中,module关键字表示该元数据将作为模块被导入,代码如下: import {url} from this module; console.log(url); 还可以通过对象访问元数据: import * as metaData from this module; console.log(metaData.url); 除了提供模块的声明式语法之外,ES6还包括编程API,让开发人员通过编程方式使用模块和脚本,并配置模块加载。针对该API,Rauschmayer说:
Rauschmayer还提到,加载器API(目前该特性的实现仍在进行中)为配置提供了许多钩子。我们可以通过加载器API“自定义加载过程”,比如:
Rauschmayer说,可配置的模块加载过程是Node.js和CommonJS的所缺乏的功能之一。 对于ES6模块语法的最终细节,JavaScript社区的反应大部分是积极正面的。 在Reddit上,有一场关于ECMAScript 6模块:最终语法的讨论,用户brtt3000评论说:“我很喜欢,它看起来包含了所有重要的部分,而且语法也很不错”。在Hacker News上,来自 The Hackerati的软件工程师Alan Johnson也评论道:“ES6使人耳目一新”。 但在某些方面,ES6也存在困惑和忧虑。 Evan Winslow对Rauschmayer的文章作了如下评价,他说:
Rauschmayer对此回复说:
希望为ES7+提供建议的InfoQ读者请移步ECMAScript 6 Github。 查看英文原文:ECMAScript 6 Modules Go Beyond CommonJS and AMD |