Tento příspěvek naposledy upravila Summer dne 13. 2. 2019 v 14:04
V roce 2009 americký programátor Ryan Dahl vytvořil node.js projekt využívající jazyk JavaScript pro serverové programování.
To znamená zrod "modulárního programování v JavaScriptu". Složitost front-endu je omezená a je v pořádku nemít žádné moduly, ale na straně serveru musí existovat moduly pro interakci s operačním systémem a dalšími aplikacemi, jinak to nelze vůbec programovat.
Jednou z nejdůležitějších myšlenek v programování uzlů jsou moduly, a právě tato myšlenka umožňuje rozsáhlé inženýrství JavaScriptu. Modulární programování bylo populární ve světě JS a bylo na něm založeno, a pak se na straně prohlížeče objevily nástroje jako requirejs a seajs, obrazně řečeno, pod odpovídající specifikací, které vyžadovaly veškeré modulární programování před ES6, a to i dnes, ještě před plnou implementací modulu ES6.
V CommonJS modul expozice používá module.exports a export, a mnoho lidí nechápe, proč jsou tam dva exponované objekty, které budou představeny později
V CommonJS existuje globální metoda require(), která se používá k načítání modulů. Pokud existuje matematický modul math.js, lze ho načíst takto.
Metody poskytované modulem pak můžete nazývat takto:
Právě kvůli metodě require používané CommonJS byla metoda require používaná AMD a CMD později použita pro označení stylu modulů
Specifikace AMD
U serverových modulů je přirozené, že každý chce klientské moduly. A je nejlepší, když jsou oba kompatibilní a modul může běžet jak na serveru, tak v prohlížeči bez úprav.
Existuje však zásadní omezení, které činí specifikaci CommonJS neaplikovatelnou na prostředí prohlížeče. Stále kód z předchozí části, pokud běží v prohlížeči, bude velký problém
Druhý řádek math.add(2, 3) běží po prvním řádku požadavku ('math'), takže musí počkat, až math.js načtení skončí. To znamená, že pokud je načítací doba dlouhá, celá aplikace tam zastaví a počká.
Na straně serveru to není problém, protože všechny moduly jsou uloženy na lokálním pevném disku a lze je načíst synchronně, přičemž doba čekání je doba čtení pevného disku. Pro prohlížeče je to však velký problém, protože moduly jsou umístěny na straně serveru a doba čekání závisí na rychlosti internetu, která může trvat dlouho, a prohlížeč je ve stavu "pozastavené smrti".
Proto moduly na straně prohlížeče nemohou používat "synchronní", ale pouze "asynchronní". To je pozadí vzniku specifikace AMD.
AMD je zkratka pro "Asynchronous Module Definition" (Asynchronous Module Definition), což znamená "Asynchronous Module Definition" (Asynchronous Module Definition). Načítá modul asynchronně a načítání modulu neovlivňuje provoz jeho následujících příkazů. Všechny příkazy, které závisí na tomto modulu, jsou definovány v callback funkci, která se spustí až po dokončení načítání.
Moduly musí být definovány pomocí specifické funkce define().
•ID: řetězec, název modulu (volitelné) •dependencies: je závislý modul, který chceme načíst (volitelné), pomocí relativní cesty. , všimněte si, že jde o formát pole •tovární: tovární metoda, vrací modulovou funkci Pokud modul nezávisí na jiných modulech, lze jej definovat přímo ve funkci define().
Pokud modul závisí i na jiných modulech, pak prvním argumentem funkce define() musí být pole, které indikuje závislosti modulu.
Když funkce requir() načte výše uvedený modul, nejprve načte Lib.js soubor.
AMD také používá příkaz require() k načtení modulu, ale na rozdíl od CommonJS vyžaduje dva parametry:
Prvním parametrem [modul] je pole a prvky v něm jsou moduly, které se mají načítat; Druhým parametrem callback je funkce callbacku po úspěšném zatížení. Pokud přepíšete předchozí kód do podoby AMD, vypadá to takto:
math.add() není synchronizován s načítáním matematického modulu a prohlížeč nepřerušuje animaci. Takže je zřejmé, že AMD je vhodnější pro prostředí prohlížečů.
V současnosti existují dvě hlavní Javascriptové knihovny, které implementují specifikaci AMD :require.js a curl.js.
|