JavaScript a modularizace kódu

Květena kraje Jindřichohradeckého

Se zvláštním přihlédnutím ke Kardašově Řečici

JavaScript a modularizace kódu

Se zvláštním přihlédnutím ke klientskému JS

Ondřej Žára, @0ndras

Rozděl a panuj

Pravěk: globals

node.js

Browserify

Browserify v akci

# node modul projects/musicmetadata $ du -bh lib 55K lib # browserify build projects/musicmetadata $ du -bh dist 228K dist

Opičíme se: AMD

ES2015 Modules

ES2015 Modules: statický graf závislostí

// fasáda zastřešující funkce specifické pro platformu module.exports = require("./" + process.platform);

ES2015 Modules: nativní podpora

Není.

ES2015 Modules: babel

System API

// nacist a vratit... System.import("nejaky/modul").then(...); // alternativne nejprve zaregistrovat v ramci nacitani JS System.register("jmeno/modulu", depends, initializer);

System API polyfill

Souhrn

Module IDs

< Domenic> ondras: I would bet with 80% odds on the .js being required. But there's a substantial amount of uncertainty still.

Bonus #1: node.js, automagie

~/projects/myproject $ strace node -e "require('x')" 2>&1 | grep stat | wc -l > 70

Bonus #2: CommonJS, kruhová závislost

// index.js var log = require("./log").log; exports.value = 42; log(); // log.js var index = require("./index"); exports.log = function() { console.log(index.value); } $ node . > 42

Bonus #3: node.js, kruhová závislost

// index.js var log = require("./log"); module.exports = 42; log(); // log.js var index = require("./index"); module.exports = function() { console.log(index.value); } $ node . > undefined

Prostor pro otázky