--modules inline
和--modules register
选项有什么作用?
https://github.com/google/traceur-compiler/wiki/Options-for-Compiling。
使用 2ality.com 的lib.js
示例模块:
//------ lib.js ------
export const sqrt = Math.sqrt;
export function square(x) {
return x * x;
}
export function diag(x, y) {
return sqrt(square(x) + square(y));
}
//------ main.js ------
import { square, diag } from 'lib';
console.log(square(11)); // 121
console.log(diag(4, 3)); // 5
inline
将模块包装在一个匿名函数中,由外观分配给自动生成的变量,知道这是什么会很有趣,该技术可用于捆绑模块而无需实际使用模块系统,但必须知道分配返回对象的var
:
var $__src_47_lib_46_js__ = (function() {
"use strict";
var __moduleName = "src/lib.js";
var sqrt = Math.sqrt;
function square(x) {
return x * x;
}
function diag(x, y) {
return sqrt(square(x) + square(y));
}
return {
get sqrt() {
return sqrt;
},
get square() {
return square;
},
get diag() {
return diag;
}
};
})();
//# sourceMappingURL=lib.js.map
System.register
是草稿模块格式:
System.registerModule("src/lib.js", [], function() {
"use strict";
var __moduleName = "src/lib.js";
var sqrt = Math.sqrt;
function square(x) {
return x * x;
}
function diag(x, y) {
return sqrt(square(x) + square(y));
}
return {
get sqrt() {
return sqrt;
},
get square() {
return square;
},
get diag() {
return diag;
}
};
});
System.get("src/lib.js" + '');
//# sourceMappingURL=lib.js.map
注册模块后,可以调用System.module( ... )
来加载模块。 目前我知道traceur
(虽然不是运行时)将系统对象填充,大概也babel
.
System.register
格式有一些有用的优点,我建议,一个文件中可以包含多个模块,该文件适合较小的紧密耦合模块(通常是类)的集合;无需购买另一个模块系统,例如,在节点模块中包含香草JS(测试数据,附加到全局对象的垫片等)需要额外的样板代码,从而增加工作流的开销, 等。
不过,System
对象是仍在开发中的技术(不包括当前的标准草案)。