珊珊来迟

也许是JavaScript降临于世的仓促性,注定其未来有许多改进空间。在编程语言的工程化上,JavaScript从孕育到诞生过程中也是少有甚至可以说是全无涉及,而模块化机制则是其中最严重的缺失,却是编程实践者们最迫切的需求(之一)。幸运的是,我们可以版本迭代,在ES6中终于开始着手制定语言的模块系统,珊珊来迟。

术语

在介绍ES6模块系统之前,我们先了解一些基本的概念:

  • module: 对代码单元的抽象,模块中可以 import 其他模块,可以 export 公共接口。
  • export: 模块可以暴露一些公共的方法或属性。
  • import: 通过模块名可以导入其他模块的公共接口。

语法

import $ from "jquery";                    // import the default export of a module
module crypto from "crypto";               // binding an external module to a variable
import { encrypt, decrypt } from "crypto"; // binding a module's exports to variables
import { encrypt as enc } from "crypto";   // binding and renaming one of a module's exports
export * from "crypto";                    // re-exporting another module's exports
export { foo, bar } from "crypto";         // re-exporting specified exports from another module

模块系统的工作机制

介绍两个重要的类:

  • Module: new Module({ string: Object, ... }) -> Module 用来抽象模块的类。
  • Loader: new Loader(options = {}) -> Loader 用来定义如何获取源码、转化源码、最终把源码编译为模块实例的类。每个JavaScript运行环境(浏览器,Node.js)都会有一个默认的Loader实例来支持模块系统的运作。如在浏览器端默认的Loader实例为System。

如何兼容AMD规范

如何兼容Common.JS Modules规范

Refs



blog comments powered by Disqus

Published

15 September 2013

Tags