loader scriptu js css z komponent do layoutu
- dehtak
- Člen | 113
Mozna se to tu uz resilo mnohokrat. Avsak zadne reseni me nevyhovovalo. Proto
ted delam rozsireni assets loader.
Componenta si injektuje loader zada mu $loader->load(‚pluginname‘);
A layout zkrz filtr makro {assets css} nebo {assets js} pak vypise skripty. Jak
to funguje ? Staci mit skripty dobre pojmenovane a nekde ulozene ve slozce
finderem si je projedu a udelam si takovej list cache. Pridavat scripty
z ruznych mist lze i za behu
$loader->add(‚/app/component/blabla/scrpt.js‘);
On ho pak nakopiruje do ww slozky pokud tam nebude.
Jak by meli bejt scripty pojenovane ?
jquery.min.js = loader bude vedet ze prvni je jmeno toho
scriptu pokud tam bude .min script nebude kopresovat.
jquery.plugin.js nebo jquery.plugin.min.js = loder zjisti jmeno
pluginu a zjisti ze je zavisle na jquery, tudis staci napsat poze load pluginame
a on urci zavislosti a podle toho pak seradi skripty a vypise do layoutu,
zavislosti vypise jako prvni.
pokud by byl nakej jazyk k tomu tak staci aby mel jmeno
plugin.cz.js
Editoval dehtak (9. 5. 2020 11:38)
- David Matějka
- Moderator | 6445
ahoj, a nezvažoval si – namísto vynalézání kola – použít nějaky bundler – např. webpack, rollup nebo parcel?
- dehtak
- Člen | 113
To jsou vsechno javascriptovy loadery. Ja to delam v php pro nette.
Componenta si zazada o javascript script
php vybere se seznamu scripty ktery pak posle do layoutu. Krasny jednoduchy
uciny. Vyhoda ze se nemusi nic cpat do prezenteru a predavat dal sablone. Proste
si to latte vyzada sam diky makru a filtru. Kdyz se treba zmeni soubor nakopci
do www slozky aktualni script a zada za nej ?v=nejakycislo. Kdyz pisu treba
komponentu a chci mit k ni nejakej javascript nebo styl necham to ve slozce kde
je componenta a loader se o vse postara. Az to dokoncim tak to hodim nekam
na web.
Editoval dehtak (10. 5. 2020 11:51)
- David Matějka
- Moderator | 6445
Bundlery už jsou celkem industry standard pro moderní vývoj webovýho
frontendu (ale mají užití i na node backendu). Jejich funkce je taková, že
jim dáš „entrypoint“ aplikace, tedy nějaký index.js. ten si pak
importuje (třeba pomocí es syntaxe
import foo from 'some-library'
) svoje závislosti. Bundler pak
všechny závislosti pospojuje a vyplivne jeden (nebo více) js souborů a
dalších assetů (styly, obrázky, fonty). Snadno do nich zapojíš různý
transpilery (babel) nebo jazyky (typescript) atd.
- joe
- Člen | 313
David Matějka
Myslím, že to co píše chce trochu jinak a má své jiné výhody. Pomocí bundleru by musel pro každou Nette komponentu řešit bundle.
dehtak
Otázka je, jak jsou ty skripty napsané a jestli jsou na sobě závislé nebo ne. Pokud jsou, tak je zase dobré použít nějaký bundler, který to zminifikuje najednou. Jinak si myslím, že to nezní špatně ;)
- dehtak
- Člen | 113
Joe
Jasne ze to zminifikuje pokud nevidi v nazvu .min. Musel jsem to ale nakonec
vyresit jinak.
Zadavam ty scripty normalne do loaderu jak chci aby se nacitaly po sobe
$loader->add('jquery.js');
$loader->add('nakejplugin.{lang}.js'); // tady se opta translatoru na jazyk a podle toho nacte script
$loader->add('nakejplugin.js');
$loader->add('rozsireni.nakejplugin.js');
pokud uz bude v layotu nacteny jquery tak ho to tam neprida jinak ho tam
vypise.
s tema zavislostma sem mel trosku problem protoze pak by se mi ty scripty
vypisovali v poradi v kterem nechci, takze to musim zadavat takhle.
A mam treba componentu a u ni slozku assets ve ktery mam napsanej nakej
javascript plugin a popripade naky to cssko.
v componente si necham injectnout loader a zadam mu scripty ktery ma predat
laoutu. a pokud nejsou ve www slozce tak je tam nakopiruje a minifikuje
popripade.
jde po pouzit uplne vsude.
A scripty co jsou direkt v layoutu jako treba boostrap.css tak ho vlastne prez makro zaregistruju aby loader vedel ze ten script uz nactenej je a nevypisoval ho po druhy , kdyz by si to nejaka komponenta vyzadovala.
priklad mate 3–4 weby a jeden vendor tam nejaky rosireni. Jeden web bude pouzivat rozsireni 1,2,3 druhej web 4,5 treti 1,4,5 atd.. a pokud ten web nacte treba filemanager tak filemanager zada loaderu ze chce tyto scripty a to nacte do www slozky urciteho webu. Vlatne se neni o co starat,je to takova autoinslace :))
Nevim jestli me uplne chapete co mam na mysli. Nekdy mluvim jak madar :))
Editoval dehtak (19. 5. 2020 16:18)