ECMAScript6之模块系统
珊珊来迟
也许是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
- http://wiki.ecmascript.org/doku.php?id=harmony:modules
- https://gist.github.com/wycats/51c96e3adcdb3a68cbc3
- http://wiki.ecmascript.org/doku.php?id=harmony:module_loaders
blog comments powered by Disqus