PostCSS

Allikas: Vikipeedia
(Ümber suunatud leheküljelt Postcss)
PostCSS
Arendaja Andrei Sitnik, Ben Briggs, Bogdan Chadkin[1]
Esmaväljalase 2013
Viimane väljalase 7.0.4, President Amy / 27. september 2018[2]
Kirjutatud keeles JavaScript
Litsents MIT litsents[3]
Veebisait postcss.org

PostCSS on tarkvaraarenduse tööriist, mis kasutab JavaScripti-põhiseid pluginaid rutiinsete CSS-operatsioonide automatiseerimiseks[4]. Seda on kasutatud Vikipeedia[5][6], Facebooki[7] ja GitHubi[8][9] arenduses. PostCSS-i looja on Andrei Sitnik, kes töötas tol ajal ettevõttes Evil Martians.[10]

Tööpõhimõte[muuda | muuda lähteteksti]

Struktuur[muuda | muuda lähteteksti]

Erinevalt Sassist ja LESS-ist, PostCSS ei ole CSS-ist kompileeritud mallikeel, vaid raamistik CSS-tööriistade loomiseks.[11] Seda saab kasutada selliste mallikeelte nagu Sass ja LESS arendamiseks.[12]

PostCSS-i tuum koosneb järgmistest osadest:[13]

  • CSS-i parser, mis genereerib objektipuu (AST) CSS-i koodireast;
  • komplekt klassidest, mida see puu sisaldab;
  • CSS-generaator, mis genereerib objektipuust CSS koodi;
  • koodi kaardi generaator CSS-is tehtud muudatuste jaoks.

Kõik vajaminevad funktsioonid on kättesaadavad pluginate kaudu. Pluginad on väikesed programmid, mis töötavad objektipuuga. Kui tuum on transformeerinud CSS koodi objektipuuks, pluginad analüüsivad ja muudavad seda.

Kasutus[muuda | muuda lähteteksti]

Nii PostCSS-i tuum kui ka pluginprogrammid on kirjutatud JavaScriptis ja levitatud läbi npm-süsteemi. PostCSS pakub madala taseme JavaScripti toimingute jaoks API-d:

// Laadi tuum ja pluginad npm-ist
const postcss = require('postcss')
const autoprefixer = require('autoprefixer')
const precss = require('precss')

// Määra pluginad, mida kasutada
const processor = postcss([autoprefixer, precss])

// Määra CSS-kood ja sisend- ja väljundfailide nimed 
processor.process('a {}', { from: './app.css', to: './app.build.css' })
  // Kasuta Promise API-d juhuks, kui on olemas sünkroniseerimata pluginad
  .then(result => {
    // Protsessitud CSS-kood
    console.log(result.css)
    // Hoiatused
    for ( let message of result.warnings() ) {
      console.warn(message.toString())
    }
  })

On olemas ametlikud tööriistad, mis võimaldavad PostCSS-i kasutada koos selliste ehitamissüsteemidega nagu Webpack,[14] Gulp[15] ja Grunt.[16] Lisaks on võimalik alla laadida käsureaga liidest.[17] Kasutades Browserifyt või Webpacki, saab PostCSS-i avada otse brauseris.[18]

Süntaksid[muuda | muuda lähteteksti]

PostCSS võimaldab vahetada parserit ja generaatorit, et töötada LESS[19] ja SCSS[20] allikatega. Iseenesest PostCSS ei saa aga kompileerida LESS, SCSS ja Sass koodi CSS-iks, vaid ainult muuta originaalfaile – näiteks sorteerida CSS omadusi või otsida koodivigu.

Pluginad[muuda | muuda lähteteksti]

PostCSS-i jaoks on olemas rohkem kui 300 laiendust.[21] PostCSS-i pluginad lahendavad enamikku CSS-i tootmisülesandeid. Pluginate kvaliteet ja populaarsus on väga erinev.

Täielik pluginate nimekiri on leitav lehel postcss.parts. Mõned näited:

  1. autoprefixer[22] lisab ja kustutab brauserite prefikseid. See on PostCSS populaarseim plugin. SitePointi hinnangu kohasel kasutas 2016. aasta märtsis seda 56% arendajatest;[23]
  2. CSS modules[24] automaatselt isoleerib CSS-selektoreid ja organiseerib koodi. CSS modules on Webpacki sisse ehitatud;[25]
  3. styleint[26] analüüsib CSS koodi, otsib vigu ja kontrollib vastavust kehtivatele standarditele. styleint on kasutusel Vikipeedias,[6] Facebookis[7] ja GitHubis.[9] Teine plugin, stylefmt, parandab CSS-i vastavalt styleint sätetele;
  4. postcss-cssnext[27] emuleerib funktsioone lõpetamata CSS-spetsifikatsiooni mustanditest. See on kasutusel Vikipeedias;[5]
  5. cssnano[28] teeb CSS-i lühemaks, eemaldades tühikuid ja tihendades koodi. cssnano on kasutusel Webpackis, BBC-s ja JSFiddle’is;[29]
  6. postcss-assets,[30] postcss-inline-svg[31] ja postcss-sprites[32] töötavad graafikaga.

Kriitika[muuda | muuda lähteteksti]

Ühed pluginad on kritiseeritud,[33] teised muutusid de facto standardiks. Näiteks autoprefikserit soovitab Google brauserite prefiksite probleemi lahendamiseks.[34]

Üldiselt võtsid arendajad PostCSS soojalt vastu. Sassi arendajad peavad PostCSS-i heaks täienduseks Sassile.[35]

Põhiline küsimus on järgmine: kas PostCSS-ist piisab CSS süsteemi ehitamisel. Ühelt poolt saavad sellised laiendused nagu PreCSS või postcss-cssnext asendada paljusid Sass ja LESS funktsioone.[36] SugarSS süntaks saab asendada Sassi ja Styluse minimalistliku süntaksi.[37] Teisest küljest aga mõned eksperdid, sealhulgas ka PostCSS-i looja, soovitavad vanades projektides kasutada Sassi ja LESSi.[38]

Eelised[muuda | muuda lähteteksti]

  • Funktsionaalsus. Paljud PostCSS-i pluginad on unikaalsed. Sellepärast PostCSS-i kasutatakse sageli ka nendes projektides, kus on juba kasutusel Sass või LESS.[39]
  • Unifitseerimine. PostCSS-i pluginad lubavad lahendada enamikku CSS-i ehitamise ülesandeid. Tulemusena saavad kõik CSS-i tööriistad kasutada üht parserit, ühisarhitektuuri ja ühiseid arendusvahendeid. Kuna kõik pluginad kasutavad ühte ja sama ühekordselt moodustatud objektipuud, tõuseb jõudlus.[11]
  • Moodulid. Kasutaja on oma PostCSS-i pluginate valikul vaba ja võib suurema jõudluse jaoks ebavajalikud välja lülitada.[40] Kuna probleemide lahendamiseks võib olla mitu erinevat pluginit, kasutaja saab ise valida sobivamaid tööriistu. PostCSSi looja usub, et mida suurem arv pluginaid võistlevad kasutaja tähelepanu pärast, seda paremaks nad lõpuks muutuvad.
  • Kiirus. PostCSS on varustatud ühe kiireima JS-põhise CSS-i parseriga.[41] See on kuni 20 korda kiirem kui Ruby Sassil ja 4 korda kiirem kui LESS-il, kui vaadata eeltöötlusprotsessori baasülesandeid. Tegelik jõudlus sõltub suurel määral paigaldatud pluginate arvust. PostCSS-i looja on öelnud, et kaasaegsed eeltöötlusprotsessorid töötavad liiga kiiresti, et kiirendus oleks märgatav.[42]

Puudused[muuda | muuda lähteteksti]

  • Raske konfigureerida. Mõned arendajad kipuvad vältima pluginate valimist ja nende sätestamist.[43] Valmis pluginate komplektid on probleemile ainult osaline lahendus.
  • Mittestandardne süntaks. Kuna iga projekt kasutab oma pluginate komplekti, ei pruugi uus arendaja kohe mõista, et mingi talle tundmatu funktsioon on seotud ebapopulaarse PostCSS-i pluginaga.[35] Soovitatav on kasutada postcss-use,[38] et näidata iga faili nimelaiendit, kuid paljud ei kasuta sellist lähenemist.[44]
  • Eraldi parserid selektorite ja väärtuste jaoks. PostCSS salvestab CSS-selektoreid ja ridade väärtuseid ilma neid täiendavalt analüüsimata. Nende parsimiseks peavad pluginad kasutama lisaparsereid. PostCSS-i meeskond kavatseb seda tulevastes versioonides parandada.[45]
  • Järkjärguline töötlemine. Kuna objektipuu suudab korraga reageerida ainult ühele pluginale, võib arvukate pluginate kasutamine vähendada jõudlust. Lisaks on funktsioone, mida ükski plugin ei saa töödelda. PostCSS-i meeskond kavatseb seda tulevastes versioonides parandada.[46]

Viited[muuda | muuda lähteteksti]

  1. Who can release PostCSS to npm vaadatud 05.11.2018
  2. PostCSS Releases vaadatud 05.11.2018
  3. License in PostCSS repo vaadatud 05.11.2018
  4. Esimene artikkel PostCSS-i kohta Tuts+ kursusel envatotuts+. Vaadatud 05.11.2018
  5. 5,0 5,1 Adding PostCSS commit in Wikipedia repo GitHub. Vaadatud 05.11.2018
  6. 6,0 6,1 Wikimedia Stylelint Config GitHub. Vaadatud 05.11.2018
  7. 7,0 7,1 Improving CSS quality at Facebook and beyond code.fb.com. Vaadatud 05.11.2018
  8. PostCSS settings GitHub build tool GitHub. Vaadatud 05.11.2018
  9. 9,0 9,1 Primer Stylelint Config GitHub. Vaadatud 05.11.2018
  10. Evil Martians commit in PostCSS repo GitHub. Vaadatud 05.11.2018
  11. 11,0 11,1 What is PostCSS arutelu GitHub. Vaadatud 05.11.2018
  12. PostCSS Deep Dive: Preprocessing with "PreCSS" envatotuts+. Vaadatud 05.11.2018
  13. Andrey Sitnik - PostCSS: The Future After Sass and LESS YouTube. Vaadatud 05.11.2018
  14. postcss-loader GitHub. Vaadatud 05.11.2018
  15. gulp-postcss GitHub. Vaadatud 05.11.2018
  16. grunt-postcss GitHub. Vaadatud 05.11.2018
  17. postcss-cli GitHub. Vaadatud 05.11.2018
  18. Running postcss in the browser GitHub. Vaadatud 05.11.2018
  19. postcss-less GitHub. Vaadatud 05.11.2018
  20. postcss-scss GitHub. Vaadatud 05.11.2018
  21. PostCSS plugins list GitHub. Vaadatud 05.11.2018
  22. autoprefixer GitHub. Vaadatud 05.11.2018
  23. The Results of The Ultimate CSS Survey Sitepoint. Vaadatud 05.11.2018
  24. css-modules GitHub. Vaadatud 05.11.2018
  25. css-loader dependencies GitHub. Vaadatud 05.11.2018
  26. stylelint styleint. Vaadatud 05.11.2018
  27. cssnext.io cssnext. Vaadatud 05.11.2018
  28. cssnano.co cssnano. Vaadatud 05.11.2018
  29. cssnano users list GitHub. Vaadatud 05.11.2018
  30. postcss-assets GitHub. Vaadatud 05.11.2018
  31. postcss-inline-svg GitHub. Vaadatud 05.11.2018
  32. postcss-sprites GitHub. Vaadatud 05.11.2018
  33. The Trouble With Preprocessing Based on Future Specs CSS-TRICKS. Vaadatud 05.11.2018
  34. Set Up Your Build Tools developers.google.com. Vaadatud 05.11.2018
  35. 35,0 35,1 Extending Sass with PostCSS CSS-TRICKS. Vaadatud 05.11.2018
  36. Breaking up with Sass: it’s not you, it’s me benfrain.com. Vaadatud 05.11.2018
  37. SugarSS discussion on Meteor forum Meteor. Vaadatud 05.11.2018
  38. 38,0 38,1 dotCSS 2015 - Andrey Sitnik - Fix Global CSS with PostCSS YouTube. Vaadatud 05.11.2018
  39. Using PostCSS Together with Sass, Stylus, or LESS envatotuts+. Vaadatud 05.11.2018
  40. Arutelu PostCSS-i jõudluse üle Twitteris Twitter. Vaadatud 05.11.2018
  41. PostCSS parsers benchmark GitHub. Vaadatud 05.11.2018
  42. PostCSS becomes 1.5x faster Evil Martians’ team blog. Vaadatud 05.11.2018
  43. The Sad State of Web Development Medium. Vaadatud 05.11.2018
  44. postcss-use downloads npm-stat.com. Vaadatud 05.11.2018
  45. Integrate value & selector parsing into PostCSS core GitHub. Vaadatud 05.11.2018
  46. Event based API GitHub. Vaadatud 05.11.2018

Välislingid[muuda | muuda lähteteksti]