ES6 Modules
fixing Javascript's global scope pollution problem sometime this year
What we have now (plain js)
windowvar wizard = (function() {
"use strict";
var privateVariable = "I'm invisible!";
function doMagic() {
// magic
}
return {
castSpell: function(mana) {
if(mana) {
doMagic();
}
}
}
})();
// anywhere else
wizard.castSpell();What we have now (better?)
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";
}
}
});What we'll get this year
file based modules
What we got last year
import syntax
export syntax
What we got last year
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";What we got last year
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 …;What we didn't get
browers able to load modules
browsers able to understand import/export
But.. but.. modules? :(
Transpilation
Module loaders
Example
Transpiler: TypeScript for ES6 to ES5
Module loader: Systemjs
ES6Modules
By Ilie Vasilica Ciotir
ES6Modules
A presentation on ES6 modules.
- 331