PostCSS
PostCSS je program , který automatizuje rutinní CSS operace pomocí rozšíření napsaných v JavaScriptu [5] . Používá se při vývoji Wikipedie [6] [7] , Facebooku [8] a GitHubu [9] [10] . Jeden z nejčastěji stahovaných CSS nástrojů z npm [11] . Vyvinul Andrey Sitnik ve společnosti "Evil Martians" [12] .
Jak to funguje
Struktura
Na rozdíl od Sass a LESS není PostCSS šablonovacím jazykem, který se kompiluje do CSS. PostCSS je platforma, na které můžete vytvářet různé CSS nástroje [13] . Zejména PostCSS lze také použít k vytvoření šablonovacího jazyka, jako je Sass a LESS [14] .
Jádro PostCSS se skládá z: [15]
- analyzátor CSS , který generuje strom objektů ( AST ) z řetězce kódu CSS;
- množina tříd , ze kterých se tento strom skládá;
- generátor CSS, který generuje řetězec CSS ze stromu objektů;
- generátor mapy kódu pro změny provedené v CSS.
Všechny užitečné funkce poskytují rozšíření - malé programy, které pracují se stromem objektů . Poté, co jádro transformuje řetězec CSS na strom objektů, rozšíření analyzují a upravují strom postupně. Jádro PostCSS pak vygeneruje nový řetězec CSS ze stromu, který byl upraven rozšířeními.
Použití
Rozšíření jádra i PostCSS jsou napsána v JavaScriptu . Všechny jsou distribuovány prostřednictvím systému npm .
PostCSS poskytuje API pro práci s JavaScriptem na nízké úrovni:
// Načíst jádro a rozšíření z npm
const postcss = vyžadovat ( 'postcss' )
const autoprefixer = vyžadovat ( 'autoprefixer' )
const precss = vyžadovat ( 'precss' )
// Určete, která rozšíření chceme použít
const processor = postcss ([ autoprefixer , precss ])
// Zadejte kód CSS a název vstupního/výstupního souboru
procesor . process ( 'a {}' , { from : './app.css' , to : './app.build.css' })
// Použití rozhraní Promise API pro asynchronní rozšíření
. then ( result => {
// Výstup kódu CSS po zpracování
console . log ( result . css )
// Zobrazení varování z rozšíření
pro ( let message of result . warnings () ) {
console . warning ( message . toString ())
}
})
Existují oficiální nástroje pro použití PostCSS se sestavovacími systémy jako Webpack [16] , Gulp [17] , Grunt [18] . Konzolové rozhraní [19] je dodáváno samostatně . S pomocí Browserify nebo Webpack bundleru lze PostCSS spustit v prohlížeči [20] .
Syntaxe
Vývojář používající PostCSS může změnit parser a generátor - pak bude PostCSS pracovat s takovými zdroji, jako jsou: LESS [21] , SCSS [22] , Sass [23] . PostCSS sám ale neumí LESS, SCSS nebo Sass zkompilovat do CSS, pouze upravuje původní zdrojové soubory, jako je řazení vlastností CSS nebo hledání chyb v kódu.
Může také používat syntaxi SugarSS, inspirovanou kompaktní syntaxí Sass a Stylus [24] .
Rozšíření
Pro PostCSS bylo napsáno přes 300 rozšíření [25] . Rozšíření PostCSS mohou vyřešit většinu úloh zpracování CSS, od analýzy a třídění vlastností až po kompresi. Kvalita a oblíbenost rozšíření se přitom velmi liší.
Kompletní seznam rozšíření najdete na postcss.parts . Několik příkladů:
- Autoprefixer [26] – přidává a čistí předpony prohlížeče. Jedná se o nejoblíbenější rozšíření PostCSS , v březnu 2016 jej použilo 56 % vývojářů, podle SitePoint27
- CSS Modules [28] je automatický systém pro izolaci selektorů CSS a organizování kódu. Zabudováno do oblíbeného balíčku Webpack [29] .
- Stylelint [30] – analyzuje chyby v kódu CSS a také dodržuje přijatý styl. Používá Wikipedia [7] , Facebook [8] a GitHub [10] . Další rozšíření stylefmt [31] opravuje CSS podle nastavení Stylelint.
- PreCSS [32] je sada rozšíření, která opakují některé funkce preprocesorů jako Sass nebo LESS.
- postcss-preset-env [33] je sada rozšíření pro emulaci funkcí z nedokončených návrhů specifikací CSS.
- cssnano [34] - snižuje velikost kódu CSS odstraněním mezer a přepsáním kódu do stručné podoby. Používá Webpack, BBC a JSFiddle [35] .
- RTLCSS [36] - Změní kód CSS tak, aby byl design vhodný pro psaní zprava doleva (jako v arabštině a hebrejštině ). Používá se ve WordPressu [37] .
- postcss-assets [38] , postcss-inline-svg [39] a postcss-sprites [40] pro práci s grafikou.
Některé nástroje, které nejsou rozšířeními PostCSS, používají ke své práci PostCSS. Například oblíbený Webpack builder obsahuje PostCSS pro práci s CSS [41] .
Kritika
Zatímco některá rozšíření byla kritizována [42] , jiná se stala de facto standardem. Google například doporučuje Autoprefixer k vyřešení problému s předponami prohlížeče v CSS [43] .
Celkově byl PostCSS průmyslem dobře přijat [44] . Dokonce i vývojáři Sass považují PostCSS za dobrý doplněk k Sass [45] .
Hlavní diskutovanou otázkou je, zda má cenu stavět systém CSS pouze na rozšíření PostCSS. Na jedné straně mohou rozšíření PreCSS nebo postcss-cssnext nahradit mnoho funkcí Sass a LESS [46] . Syntaxe SugarSS může nahradit kompaktní syntaxi Sass a Stylus [47] . Ale na druhou stranu sám autor PostCSS nedoporučuje ve starých projektech ustupovat od Sass a LESS [48] .
Výhody
- Funkčnost. Mnoho rozšíření PostCSS je jedinečných [49] . PostCSS se proto používá i v projektech, které již mají Sass nebo LESS [50] .
- Unifikace. Rozšíření PostCSS umožňují řešit téměř všechny úlohy sestavení CSS [51] – od hledání chyb v kódu až po kompresi. Díky tomu mohou všechny nástroje CSS používat jeden analyzátor, jedinou architekturu a společné vývojové nástroje. Všechna rozšíření použijí analyzovaný strom objektů jednou, což má pozitivní vliv na výkon [13] .
- Modularita. Každý uživatel si vybere rozšíření PostCSS a může z důvodu výkonu zakázat nepotřebná rozšíření [52] . Jelikož existují různá rozšíření pro řešení stejných problémů, uživatel si může vybrat nástroje, které jsou pro něj nejvhodnější [53] . Autor PostCSS se domnívá, že konkurence rozšíření stimuluje jejich rozvoj [15] .
- Rychlost práce. PostCSS má jeden z nejrychlejších analyzátorů CSS napsaný v JS [54] . Na základních preprocesorových úlohách může běžet až 20krát rychleji než Ruby Sass a 4krát rychleji než LESS [55] . Skutečný výkon však velmi závisí na počtu rozšíření. I sami autoři PostCSS si všímají, že moderní preprocesory jsou již příliš rychlé a zrychlení často není vidět [56] .
Nevýhody
- Obtížnost nastavení. Někteří vývojáři považují za zastrašující vybrat rozšíření a nakonfigurovat je tak, aby spolupracovaly [57] . Hotové rozšiřující sady tento problém řeší jen částečně.
- Nestandardní syntaxe. Každý projekt může používat vlastní sadu rozšíření. Nový vývojář si možná neuvědomuje, že funkce, kterou nezná, souvisí s nepopulárním rozšířením PostCSS [45] . Autor doporučuje postcss-use explicitně specifikovat přípony pro každý soubor [48] , ale tento přístup nepoužívá každý [58] .
- Samostatné analyzátory pro selektory a hodnoty. PostCSS ukládá selektory CSS a hodnoty vlastností jako řetězce, aniž by je dále analyzoval. Rozšíření musí k analýze používat další analyzátory. Tým PostCSS to napraví v budoucích verzích [59] .
- sekvenční zpracování. Každé rozšíření postupně prochází stromem objektů, což může ovlivnit výkon, pokud existuje velký počet rozšíření. Některé vnořené funkce teoreticky rozšíření nezvládnou. Tým PostCSS to napraví v budoucích verzích [60] .
Historie
Myšlenku modulárního nástroje pro CSS poprvé navrhl TJ Holowaychuk 1. září 2012 v projektu Rework [61] . 28. února 2013 o ní TJ veřejně mluvila [62] .
14. března 2013 Andrey Sitnik ve společnosti Evil Martians vytvořil rozšíření Autoprefixer založené na Rework [63] . Rozšíření se původně jmenovalo „rework-vendors“ [64] .
S růstem Autoprefixeru byly zjištěny problémy při implementaci Rework [65] . Proto 7. září 2013 [66] Andrey Sitnik začal vyvíjet PostCSS na základě myšlenek Rework [67] .
Po 3 měsících byl vydán první plugin pro PostCSS - grunt-pixrem [68] . 22. prosince 2013 [69] , Autoprefixer přešel na PostCSS ve verzi 1.0.
PostCSS aktivně využívá téma alchymie ve své symbolice [70] . Logo projektu je znakem kamene mudrců [71] . Hlavní a vedlejší verze PostCSS dostávají jména démonů „Goetia“ [72] . Například název verze 1.0.0 je „Marquis Decarabia“.
Určité problémy nastaly s pojmem „postprocesor“ [73] . Tým PostCSS použil tento termín, aby ukázal, že PostCSS není šablonovací jazyk (preprocesor), ale pracuje s CSS [74] . Jiní vývojáři se však domnívají, že termín „postprocessor“ se lépe hodí pro nástroje, které běží v prohlížeči [42] (například -prefix-free ). Vydání rozšíření PreCSS nakonec situaci komplikuje. Tým PostCSS nyní používá termín „processor“ místo „postprocessor“ [75] .
Poznámky
- ↑ Vývojáři, kteří dokážou přenést verze PostCSS do npm . Získáno 20. 8. 2016. Archivováno z originálu 20. 9. 2016. (neurčitý)
- ↑ Potvrzení aktualizace PostCSS na 0.1
- ↑ Vydání PostCSS . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ Licence v úložišti PostCSS . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ První článek kurzu Tuts+ PostCSS . Získáno 20. srpna 2016. Archivováno z originálu dne 27. srpna 2016. (neurčitý)
- ↑ Změna, která přidává PostCSS do systému sestavování portálu Wikipedie . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ 1 2 Wikimedia Stylelint Config . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ 1 2 Zlepšení kvality CSS na Facebooku i mimo něj . Získáno 20. srpna 2016. Archivováno z originálu 11. října 2016. (neurčitý)
- ↑ Nastavení PostCSS v sestavovacím systému GitHub Archivováno 23. srpna 2016.
- ↑ 1 2 Primer Stylelint Config . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ Porovnání počtu stažení preprocesoru . Získáno 20. srpna 2016. Archivováno z originálu dne 26. srpna 2016. (neurčitý)
- ↑ Přidání sponzora do popisu projektu . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ 1 2 Diskuse o tom, co je PostCSS . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ PostCSS Deep Dive: Předzpracování pomocí „PreCSS“ . Získáno 20. srpna 2016. Archivováno z originálu 9. srpna 2016. (neurčitý)
- ↑ 1 2 Andrey Sitnik - PostCSS: Budoucnost po Sass a LESS . Získáno 20. srpna 2016. Archivováno z originálu 5. srpna 2017. (neurčitý)
- ↑ postcss-loader . Získáno 20. srpna 2016. Archivováno z originálu 21. února 2017. (neurčitý)
- ↑ gulp-postcss . Získáno 20. srpna 2016. Archivováno z originálu 28. prosince 2016. (neurčitý)
- ↑ grunt-postcss . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ postcss-cli . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ Spuštění postcss v prohlížeči . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ postcss-less
- ↑ postcss-scss . Získáno 20. srpna 2016. Archivováno z originálu 6. března 2017. (neurčitý)
- ↑ Oleh Aloshkin. Parser Sass pro PostCSS pomocí gonzales-pe. https://www.npmjs.com/package/postcss-sass _ — 2018-01-25. Archivováno z originálu 28. ledna 2019.
- ↑ cukry . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ Seznam rozšíření PostCSS . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ autoprefixer . Získáno 20. srpna 2016. Archivováno z originálu dne 26. července 2016. (neurčitý)
- ↑ Výsledky The Ultimate CSS Survey . Získáno 20. 8. 2016. Archivováno z originálu 14. 5. 2016. (neurčitý)
- ↑ css-moduly . Získáno 20. 8. 2016. Archivováno z originálu 4. 7. 2016. (neurčitý)
- ↑ Závislosti css-loaderu
- ↑ Stylelint . Získáno 20. 8. 2016. Archivováno z originálu 24. 8. 2016. (neurčitý)
- ↑ stylefmt . Získáno 20. 8. 2016. Archivováno z originálu 4. 1. 2017. (neurčitý)
- ↑ precss . Získáno 20. srpna 2016. Archivováno z originálu 9. dubna 2017. (neurčitý)
- ↑ preset-env.cssdb.org . Získáno 4. dubna 2019. Archivováno z originálu dne 29. května 2019. (neurčitý)
- ↑ cssnano.co . Získáno 20. srpna 2016. Archivováno z originálu dne 28. srpna 2016. (neurčitý)
- ↑ Seznam uživatelů cssnano . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ rtlcss.com . Získáno 20. srpna 2016. Archivováno z originálu dne 24. srpna 2016. (neurčitý)
- ↑ Generování RTL CSS: Přechod z CSSJanus na RTLCSS . Získáno 20. srpna 2016. Archivováno z originálu 21. srpna 2016. (neurčitý)
- ↑ postcss-assets . Získáno 20. srpna 2016. Archivováno z originálu 30. října 2016. (neurčitý)
- ↑ postcss-inline-svg . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ postcss-sprites . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ Vestavěná rozšíření ve Webpacku
- ↑ 1 2 Problém s předzpracováním na základě budoucích specifikací . Získáno 20. srpna 2016. Archivováno z originálu dne 29. srpna 2016. (neurčitý)
- ↑ Nastavte si nástroje pro sestavení (downlink) . Získáno 20. srpna 2016. Archivováno z originálu 14. dubna 2020. (neurčitý)
- ↑ Úvod do PostCSS . Získáno 20. 8. 2016. Archivováno z originálu 23. 8. 2016. (neurčitý)
- ↑ 1 2 Rozšíření Sass pomocí PostCSS . Získáno 20. srpna 2016. Archivováno z originálu dne 29. srpna 2016. (neurčitý)
- ↑ Rozchod se Sassem: to nejsi ty, to jsem já . Získáno 20. srpna 2016. Archivováno z originálu 21. srpna 2016. (neurčitý)
- ↑ Diskuze SugarSS na fóru Meteor . Získáno 20. srpna 2016. Archivováno z originálu dne 28. srpna 2016. (neurčitý)
- ↑ 1 2 Správné používání PostCSS | Front Talks 2015 . Získáno 20. srpna 2016. Archivováno z originálu 25. října 2020. (neurčitý)
- ↑ Boření mýtů PostCSS: Boření čtyř mýtů PostCSS . Získáno 20. srpna 2016. Archivováno z originálu 17. června 2016. (neurčitý)
- ↑ Používání PostCSS společně s Sass, Stylus nebo LESS . Získáno 20. srpna 2016. Archivováno z originálu 16. srpna 2016. (neurčitý)
- ↑ Stylelint – Jak a proč lintovat CSS . Získáno 20. srpna 2016. Archivováno z originálu dne 28. srpna 2016. (neurčitý)
- ↑ Diskuse o výkonu PostCSS na Twitteru . Získáno 20. srpna 2016. Archivováno z originálu dne 27. října 2017. (neurčitý)
- ↑ PostCSS – Sass Killer nebo Preprocessing Pretender? . Získáno 20. srpna 2016. Archivováno z originálu 21. srpna 2016. (neurčitý)
- ↑ Benchmark analyzátorů PostCSS . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ Test postCSS preprocesorů . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ PostCSS je 1,5x rychlejší . Získáno 20. srpna 2016. Archivováno z originálu 18. září 2016. (neurčitý)
- ↑ Smutný stav vývoje webu Archivováno 25. září 2016.
- ↑ statistika stahování postcss-use . Získáno 20. srpna 2016. Archivováno z originálu 21. srpna 2016. (neurčitý)
- ↑ Integrujte analýzu hodnot a selektorů do jádra PostCSS . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ Event based API . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ První odevzdání v Rework . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ Modulární předzpracování CSS s přepracováním Archivováno 18. září 2014.
- ↑ První odevzdání Autoprefixeru . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ Přejmenování projektu Commit to AutoPrefixer . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ Usnadněte potřeby autoprefixeru . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ První odevzdání v PostCSS . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ PostCSS Druhé narozeniny . Získáno 20. srpna 2016. Archivováno z originálu 18. září 2016. (neurčitý)
- ↑ První odevzdání v grunt-pixrem . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ Autoprefixer verze 1.0 "Plus ultra" . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ Diskuse o designu stránek PostCSS . Získáno 20. 8. 2016. Archivováno z originálu 10. 5. 2017. (neurčitý)
- ↑ Tweet s logem PostCSS . Získáno 20. srpna 2016. Archivováno z originálu 1. září 2019. (neurčitý)
- ↑ Tweetujte o verzích PostCSS . Získáno 20. srpna 2016. Archivováno z originálu 14. srpna 2019. (neurčitý)
- ↑ CSS před vs. post-processing Archivováno 27. srpna 2016.
- ↑ Andrey Sitnik: "Budoucnost patří CSS post-procesorům!" . Získáno 20. 8. 2016. Archivováno z originálu 13. 8. 2016. (neurčitý)
- ↑ Tweet o vypuštění termínu postprocesor . Získáno 20. srpna 2016. Archivováno z originálu dne 4. června 2017. (neurčitý)
Odkazy