loader scriptu js css z komponent do layoutu

dehtak
Člen | 113
+
0
-

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
+
+3
-

ahoj, a nezvažoval si – namísto vynalézání kola – použít nějaky bundler – např. webpack, rollup nebo parcel?

dehtak
Člen | 113
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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)