Karakteristike ES6 modula
Sa novom verzijom JavaScript-a ES6 dolazi integrisana podrška za modularno programiranje.
- Podržava module koji se smeštaju u datoteke – jedan modul po datoteci
- Moduli su jedinstveni primerci, svaki modul se izvršava samo jednom (singleton model).
- ES6 moduli mogu da rade i sinhrono i asihrono.
- Podržava “cyclic dependencies”.
- Sintaksa je još kompaktnija od CommonJS
- ES moduli imaju statičku strukturu. Pošto je struktura modula nepromenjiva, često je dovoljno da se pregleda kod i shvati šta se gde importuje. Ovo nije slučaj kod dinamičke strukture, gde je često potrebno da se kod izvrši da bi se videlo šta se importuje. Eventualne greške mogu da se nadju i u vreme kompajliranja (sa modul bundler-om), jer se sve radnje vezane za import i export modula odredjuju u tom trenutku.
- Svi uvezeni elementi su nepromenjivi iz modula koji importuje. Svaka operacija dodeljivanja vrednosti uveženom elementu bi prouzrokovala grešku (TypeError).
- ES6 se ne pravi kopiju svojstva već deli vezu na to svojstvo. Ovo važi čak i za deljenje primitivnih svojstava (“broj” ili “string”). U narednom primeru vidimo da ukoliko matični modul promeni vrednost deljenog svojstva (promena je izvršena metodom iz matičnog modula!), modul koji je importovao to svojsto “vidi” tu promenu.
PRIMER
proracun.js
1234export let brojac = 1;export function povecaj() {brojac++;}main.js
Importujemo sve elemente koji su eksportovani iz modula “proracun.js”
1234import {brojac} from './proracun';console.log(proracun.brojac); // 1proracun.povecaj(); // Pozivanje metotde iz uvezenog modulaconsole.log(proracun.brojac); // 2Ako bi se sada koristila promenjiva “brojač” u nekom “trećem” modulu imala bi vrednost 2.