fixing Javascript's global scope pollution problem sometime this year
windowvar wizard = (function() {
"use strict";
var privateVariable = "I'm invisible!";
function doMagic() {
// magic
}
return {
castSpell: function(mana) {
if(mana) {
doMagic();
}
}
}
})();
// anywhere else
wizard.castSpell();System.register([], function(exports_1, context_1) {
"use strict";
var __moduleName = context_1 && context_1.id;
var privateVariable;
function doMagic() {
// magic
}
function castSpell(mana) {
if (mana) {
doMagic();
}
}
exports_1("castSpell", castSpell);
return {
setters:[],
execute: function() {
privateVariable = "I'm invisible";
}
}
});file based modules
import syntax
export syntax
import defaultMember from "module-name";
import * as name from "module-name";
import { member } from "module-name";
import { member as alias } from "module-name";
import { member1 , member2 } from "module-name";
import { member1 , member2 as alias2 , [...] } from "module-name";
import defaultMember, { member [ , [...] ] } from "module-name";
import defaultMember, * as name from "module-name";
import "module-name";export { name1, name2, …, nameN };
export { variable1 as name1, variable2 as name2, …, nameN };
export let name1, name2, …, nameN; // also var
export let name1 = …, name2 = …, …, nameN; // also var, const
export default expression;
export default function (…) { … } // also class, function*
export default function name1(…) { … } // also class, function*
export { name1 as default, … };
export * from …;
export { name1, name2, …, nameN } from …;
export { import1 as name1, import2 as name2, …, nameN } from …;browers able to load modules
browsers able to understand import/export
Transpilation
Module loaders
Transpiler: TypeScript for ES6 to ES5
Module loader: Systemjs