Adresářová struktura – less

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
marau
Člen | 50
+
0
-

Zdravím,

po delší době studování, pročítání a dalších úprav jsem se rozhodl přejít z čistého css na less. Syntax jazyka a bootstrap už celkem zvládám a na některých menších projektech jsem ho již použil (kompilovaný přes grunt). Nyní se snažím vymyslet adresářovou strukturu pro jeho začlenění do stávajícícho systému, na kterém běží složitější projekty. Co jsem tak pochopil tak by less soubory neměly / nemusejí být uploadovány na ostrý server do viditelných adresářu a tak (z mého pohledu) nemají co dělat v adresáři www. Zároveň mám však asi v hlavě zakořeněneou bariéru, kde less je pro mě, co se umístění týče, stále css. Na kompilaci a správu less chci použít webloader (jsem na něj zvyklý).

Nyní mám celkem standardní strukturu nette:

  • app
    • vendor
      • twbs
        • bootstrap
  • www
    • admin
      • css
      • less???
    • web1
    • web2
      • … další složky, které nejsou důležité

Mám tedy několik otázek:

  • Jakou používáte strukturu? Máte less soubory v adresáři less ve www (a zamezen přístup pro čtení třeba přes .htacess) nebo je máte umístěné jinde?
  • instalujete twitter/bootstrap přes composer? Nebo by se nemělo css/js/php ve složce vendor vůbec míchat?
  • jak importujete třeba bootstrap less soubory do svých? Pomocí importů? Uvádíte relativní cestu nebo jde do less dostat třeba proměná s absolutní cestou k boostrapu?
  • je používání less přes webloader dobrý přístup? Nebo je lepší kompilovat a přes webloader si spravovat již zkompilovaná css?
Oli
Člen | 1215
+
0
-

Používal sass, netbeanse a webloader.

Workflow: V Netbeans ulozim sass soubor→ automaticky se vygeneruje css → webloader z toho udela jeden soubor a minifikuje.

Na server teda posílám jen css a sass soubory mam v nějaký support složce spolu s dumpem db atd.

marau
Člen | 50
+
0
-

Ok, to je asi dobrý postup. Verzovat pouze less soubory, z nich nechat generovat csska, která se nahrávají na ostrý server. Tyto css se již na serveru automaticky minifikují přes filtry webloaderu. Jen si ještě nejsem jist, zda na generování používat netbeans a nebo zůstat u gruntu přes příkazovou řádku. A také jsem si ještě nedal dohromady tu adresářovou strukturu, kam nahrávat less soubory.
Asi zůstanu u www/název_projektu/less.

David Matějka
Moderator | 6445
+
0
-

Jakou používáte strukturu? Máte less soubory v adresáři less ve www (a zamezen přístup pro čtení třeba přes .htacess) nebo je máte umístěné jinde?

ano, mam je ve www, nijak to ani neblokuju (a kdybych chtel, tak proste to excludnu v deploy scriptu)

instalujete twitter/bootstrap přes composer? Nebo by se nemělo css/js/php ve složce vendor vůbec míchat?

pres bower

jak importujete třeba bootstrap less soubory do svých? Pomocí importů? Uvádíte relativní cestu nebo jde do less dostat třeba proměná s absolutní cestou k boostrapu?

ano, pomoci @import s relativni cestou

je používání less přes webloader dobrý přístup? Nebo je lepší kompilovat a přes webloader si spravovat již zkompilovaná css?

builduju pomoci gruntu, webloader mam jen na to, aby tam pridalo tu verzi :)

marau
Člen | 50
+
0
-

Je nejak fatalne spatne to instalovat pres composer? Vím, že composer je primárně určen pro frontend, ale nějak mi v tom případě uniká, proč je bootstrap vůbec přes composer možné instalovat. Jinak @matej21 , mohu te poprosit o tvou adresářovou strukturu po začlenění boweru? Spravuješ si závislosti zvlášť pro každý modul (admin, frontend1, frontend2) nebo máš vše dohromady v nějakém sdíleném adresíři. Možná se ptám naprosto dementně, ale nechci v tomhle dělat chyby už od začátku. Já se snažím co možná nejvíce knihoven načítat z cdn repozitářů a tam mi použití boweru pro instalaci čehokoliv jiného než bootstrapu a dalších less fw/mixinů atd … uniká.

Jinak ještě druhý dotaz ohledně gruntu. Máš na kompilaci udělané nějaké workflow? Nechce se mi po každé editaci less pouštět příkazovou řádku, určitě to půjde jednodušeji :)

Díky za odpověď

Oli
Člen | 1215
+
0
-

Já se snažím co možná nejvíce knihoven načítat z cdn repozitářů a tam mi použití boweru pro instalaci čehokoliv jiného než bootstrapu a dalších less fw/mixinů atd … uniká.

Tak bower je composer pro frontend. Jde o to, že ti pohlídá závislosti. Proto třeba přes bower nainstaluješ 4 knihovny a mělo by ti to stáhnout takovou jQuery verzi, která vyhovuje všem knihovnám. Pokud to stahuješ z cdnky, tak si musíš ty závislosti pohlídat sám. Taky jsem používal cdn, ale pak když jsem jel někam vlakem zjistil, že nemůžeš kloudně makat na frontentu, když ti chybí např jQuery…

Jinak co se týče toho bootstrapu, tak bych ho přes composer netahal. Nevím jestli to něčemu vadí nebo nebo ne. Composer ti spravuje php závislosti a vygeneruje ti autoloading. Tak nějak intuitivně mi tam frontend framework nepatří…

jiri.pudil
Nette Blogger | 1032
+
0
-

Jinak ještě druhý dotaz ohledně gruntu. Máš na kompilaci udělané nějaké workflow? Nechce se mi po každé editaci less pouštět příkazovou řádku, určitě to půjde jednodušeji :)

V Gruntu i Gulpu lze nakonfigurovat watch, který spustíš jednou, on si potom sám hlídá soubory a při změně nad nimi vykoná vybrané tasky. A jestli vůbec nejsi kamarád s příkazovou řádkou, PhpStorm 8 má pro oba build systémy podpůrné nástroje.

Editoval jiri.pudil (1. 10. 2014 8:32)

marau
Člen | 50
+
0
-

Ok, budu si asi ošetřovat závislosti přes bower, ale na ostrém si následně budu hlídat změny a uploadovat jen cdn odkazy. Přeci jen, na mobilních zařízeních je každý ušetřený kb k nezaplacení. Jen je škoda, že nic takového neumí bower pohlídat sám a na ostrém překládat cesty ke knihovnám na jejich registrované cdn verze. Nebo umí? :)

newPOPE
Člen | 648
+
0
-

Zavislosti: bower

Loading: webLoader (pripadne ak sa ti chce hrat tak grunt/gulp buildy vid: https://github.com/…ette-sandbox no pride mi to zbytocne)

Kompilacia: grunt/gulp task + browserSync (funguje vsade :) http://www.browsersync.io/)

Co sa tyka skryvania LESS suborov tak tie si daj kam chces mimo public-u a grunt/gulp ti to skompiluje do style.css do public

Editoval newPOPE (1. 10. 2014 10:29)

akadlec
Člen | 1326
+
0
-

Přeci jen, na mobilních zařízeních je každý ušetřený kb k nezaplacení

tak tohle snad CDN neřeší ne? buď to tahá z vlastního serveru a nebo z CDN serveru, tak jako tak si ten skript prohlížeč přece musí načíst aby s ním mohl pracovat ne?

Oli
Člen | 1215
+
+2
-

Mám pocit, že @marau to myslel tak, že prohlížeč si to (pokud natvrdo nerefreshjueš) cachuje (js, img, css). A pokud použiješ cdn, tak je možné, že už ten soubor v cache máš. Tohle ale podle mě nefunguje s webloaderem, kterej to zkompletuje na serveru. Takže s cdn musíš tahat několik souborů pro js, css, … Takže pokud to není načtené v cache, tak to trvá výrazně déle, než jeden soubor.

Proto já bych cdn neřešil, uložil si to všechno k sobě a webloader aby mě vygeneroval minifikovaný css a js soubory. Ty si potom při první návštěvě prohlížeč nacachuje a příště už je nepotřebuje.

Hlavní výhoda je, že za všech okolností prohlížeč stahuje 1 css a 1 js soubor. S cdn možná i 10+ souborů, pokud neměl nic nacachováno…

marau
Člen | 50
+
0
-

Pokud používá stejný cdn odkaz více webů, je možné, že návštěvník příjde ke mně na web a má soubor uložen již z návštěvy jiného webu. V takovém případě se mu soubor znovu nestahuje (pokud jej má nakešovaný). Například z takového jQuery je šance celkem vysoká. V ideálním případě tedy příjde a stáhne si pouzé mé css a js soubory a nemusí již natahovat frameworky.

Dá se to vyřešit production < development sekcí ve webloaderu – na produkčním tahej z cdn, na lokálním si to natahuj z lokálně stáhnutých balíčků přes bower.

Quinix
Člen | 108
+
+1
-

I u jquery je ta šance hodně nízká kvůli velkému množství verzí. Navíc na mobilních přípojeních je zásadnější počet requestů než ušetřených 100 kB za jQuery.

Osobně používám grunt podle https://pla.nette.org/…unt-a-usemin + na instalaci knihoven bower.

Editoval Quinix (1. 10. 2014 17:07)

akadlec
Člen | 1326
+
0
-

Ten článek od Honzy Černého je pěkný. Teď se zeptám asi torochu blbě, ale cílem gruntu je tedy jen vytvoření minifikovaných souborů? A ty soubory bere ze šablony po jejím vygenerování?

Quinix
Člen | 108
+
0
-

Jo, cílem toho co je v tom článku je sloučení a minifikace CSS/JS podle toho build bloku. Samozřejmě si k tomu můžeš přidat další tasky na kopilaci LESS, CoffeeScriptu, watch atd. (sám to tak mám).

Osobně vidim velkou výhodu v tom, že při vývoji můžeš pracovat s rozdělenými a neminifikovanými JS/CSS soubory a po deploy mít ve stránce jen jeden. Což myslim že třeba u webloaderu nejde.

akadlec
Člen | 1326
+
0
-

aha, no tohle za mě dělá webloader. Tomu předám všechny JS a CSS co chcu a při renderování šablony je tam vloží a buď je minifikuje a nebo je nechá tak.

AntiCZ
Člen | 13
+
0
-

Ja less kompiluju pres PHP. http://lessphp.gpeasy.com/. Pousti se jen tehdy, pokud je rozdil mdate u vysledneho css a less, takze vicemene to muze byt zapnute porad.

Mam to takhle z toho duvodu, ze clovek nikdy nevi kdo s tim webem bude za par let pracovat a pokud k tomu prijde nejaky coder, ktery nema netbeans, nezna tohle a tamhle to. Jen edituje soubor a hotovo.

Editoval AntiCZ (2. 10. 2014 11:30)

ondraondra81
Člen | 82
+
0
-

Podle mě je WebLoader super komponenta, která toto řeší, a tak nějak mě uniká proč použít grunt a dělat to ručně. (vytvářet tasky)

já mám less normálně ve složce www/css/less ale můžeš si je dát kam jen budeš chtít. pro vygenerování ccs používám plugin v phpstormu (LESS CSS Compiler), který se automaticky spustí po uložení a vygeneruje do www/css *.css soubory, které jen přidám do config.neon pro webloader.

V podstatě jsem také přemýšlel jestli ty css/less soubory nedat do někam do APP, ale přijde mě to zbytečné :)

marau
Člen | 50
+
0
-

Já už mám asi finální rozhodnutí
Adresářová struktura ve www adresáři:

  • bower.json
  • bower_components/ (neverzovaný adresář, do kterého se budou stahovat pouze komponenty, nebude se nahrávat na git ale jen zálohovat)
  • less/ (mé vlastní less soubory)
  • css/ (cíl pro zkompilované less soubory)
  • js/ (cíl pro mé vlastní js soubory)
  • media/images/ (png, jpg soubory)
  • wt/ (cíl pro zkompilované soubory webloaderu)
  • + index.php, robots.txt atd …

Nástroje:

  • bower pro správu závislostí (jquery, bootstrap, jqueryui atd …)
  • grunt pro watch a realtime kompilaci less v adresáři www/less (bootstrap a další csska se budou načítat přes @include)
  • webloader (správa zkompilovaných css a js, jejich spojení a minifikace přes filtry)

Celkem dlouho jsem se rozhodoval, zda využívat webloader a nebo použíat grunt i na minifikaci, nakonec jsem však kvůli svému pohodlí zůstal u webloaderu. Tak snad to v budoucnu shledám jako správnou volbu. A pokud ne, není to tak složité upravit.