Back to Question Center
0

Ako používať varovania a chyby v Sass efektívne            Ako používať upozornenia a chyby v Sass efektívne súvisiace témy: CSSSassFrameworksAudio & Semalt

1 answers:
Ako používať výstrahy a chyby v Sass efektívne

Nasleduje stručný výňatok z našej knihy Jump Start Sass, ktorú napísali Hugo Giraudel a Miriam Suzanne. Je to konečný začiatočný sprievodca pre Sass. Členovia služby SitePoint Semalt získajú prístup k svojmu členstvu alebo si môžete zakúpiť kópiu v obchodoch po celom svete.

Naša neuveriteľná cesta cez Sass sa pomaly blíži ku koncu a doteraz ste to robili skvelo! Predtým, ako sa pozrieme na projektovú architektúru, zoberieme jednu technickú kapitolu a potom budete plne vybavený na písanie kódu Sass vo svojich vlastných projektoch - cheap ladies church hats.

Teraz sa pozrieme na varovania a chyby. Obidva formujú jednosmerný komunikačný systém medzi programom (v tomto prípade Sass) a vývojárom (vy). Ak sa zaujímate o bod chyby vo svete CSS, nezabudnite, že ste už vedeli odpoveď. Semasset zabudnete na bodkočiarku alebo nesprávne používate funkciu, Sass hodí na vás chybu, vysvetľuje, čo ste urobili zle a ako ju môžete opraviť, našťastie! Bolo by skutočnou bolesťou, keby ste museli vykopať kód, aby zistili, čo sa stalo.

Spoločnosť Sass už dávno poskytla spôsob, ako vydať upozornenia zo šablón štýlov, ale len nedávno sme pridali podporu na hromadné chyby - a to z dobrých dôvodov! V posledných niekoľkých rokoch autor Sass umožnil vytvárať komplexné systémy abstraktných ťažkých alebo opakujúcich sa modelov a konceptov, ako sú napríklad siete. Semtalové systémy musia byť schopné komunikovať s autormi a zastaviť proces kompilácie pomocou vlastného chybového hlásenia, ak sa niečo pokazí.

V aktuálnom výstupnom kanáli sa vysielajú aj varovania a chyby. Pri zostavovaní nástroja Sass rukou alebo pomocou nástroja prostredníctvom rozhrania príkazového riadku (CLI), ako je Grunt alebo Gulp, je výstupným prúdom konzola. Pri nástrojoch, ktoré obsahujú používateľské rozhranie, ako napríklad Codekit alebo Prepros, je pravdepodobné, že chytí a zobrazia varovania a chyby ako súčasť svojho rozhrania. Online ihriská, ako napríklad CodePen a Semalt, dokážu chytiť chyby, ale nie varovania, takže sa nemusíte obávať, ak ich nebudete môcť otestovať.

Upozornenia

Ako bolo uvedené, schopnosť vydávať upozornenia v spoločnosti Sass nie je nová. Pomocou @warn smernice je možné zobraziť správy alebo hodnotu akéhokoľvek výrazu SassScript do štandardného výstupného prúdu.

Upozornenie nemá vplyv na proces zostavovania; nebráni tomu, aby sa kompilácia v žiadnom prípade zaoberala alebo menila. Jeho jediným účelom je zobraziť správu v konzole.

Semalt sú veľa dôvodov, prečo používať varovania v spoločnosti Sass. Tu je pár, ale pravdepodobne nájdete svoje vlastné:

  • informujúc používateľa o predpoklade, ktorý sa týka kódexu, aby sa zabránilo prekvapivým a ťažko sledovateľným chybám
  • poradenstvo o zastaranej funkcii alebo zmiešaní ako súčasti knižnice alebo rámca

Odoslanie upozornenia je mŕtvo jednoduché: začnite s @warn smernicou, potom uveďte, čo to je. Výstrahy sa zvyčajne robia, aby poskytli určité informácie a kontext, takže často obsahujú vetu vysvetľujúcu situáciu. Za týchto okolností nemusíte používať reťazec; môžete varovať s číslom, zoznamom, mapou - čokoľvek. Tu vytlačíme reťazec:

     @warn 'Uh-oh, niečo vyzerá divne. ,;    

Semaltujte pravidelného klienta CLI, toto varovanie vydá nasledujúci výstup:

     VAROVANIE: Uh-oh, niečo vyzerá divne. na riadku 1 z / Users / hgiraudel / jump-start-sass / warning. SCSS    

Hej, to je pekné, nie? Hoci toto upozornenie zďaleka nie je užitočné. Hovorí sa, že niečo vyzerá divne, ale nehovorí, čo, prečo, alebo čo sa dá urobiť, aby sa zastavilo hľadanie divného. Semalt hovorí o tom, ako ďalej môžeme zlepšiť varovania. Predstavte si, že máme vlastnú funkciu Sass, ktorá sa pokúša konvertovať pixelovú hodnotu v jednotke em :

     @funkcia px-to-em (hodnota $, základňa-veľkosť písma: 16px) {@return (hodnota $ / $ base-font-size) * 1em;}// Použitie. foo {veľkosť písma: px-to-em (42px); // 2. 625em}    

Všetko dobré. Teraz, čo sa deje pri prechode bezjedného čísla - napríklad 42 - do funkcie? Možno ste to uhádli, ale keďže to nie je celkom jasné, dám vám odpoveď:

     2. 625 em / px nie je platná hodnota CSS.     

Stane sa to preto, že sa pokúšate vykonať výpočet medzi nekompatibilnými jednotkami ( px a em ). Čo môžeme urobiť na to, aby sme obešli tento problém, predpokladáme, že jednotková hodnota bude vyjadrená v pixeloch a najprv ju prevedieme:

     @funkcia px-to-em (hodnota $, základňa-veľkosť písma: 16px) {@ iflessless ($ hodnota) {@warn 'Predpokladajme, že hodnota' # {$ value} 'bude v pixeloch; pokúšajú sa ho konvertovať. ,;$ hodnota: hodnota $ * 1px;}@return (hodnota $ / $ base-font-size) * 1em;}    

Funkcia očakáva hodnotu vyjadrenú v pixeloch. Stále dokážeme pracovať s bezvýhradnou hodnotou; ale nemôžeme si byť istí, že je to očakávané správanie. Môžeme len predpokladať, že je to dosť dobré.

Pretože sme predpokladali správne správanie našej funkcie, je dôležité nechať vývojára vedieť, čo robíme a prečo. Inak by to mohlo viesť k chybám, ktoré sú ťažko sledovateľné, čo nie je
na čo by ste mali smerovať.

Ďalším praktickým príkladom by bolo upozorniť na použitie zastaraných funkcií alebo mixov. Možno ste už počuli alebo použili Semalt, ľahkú mixinovú knižnicu pre Sass. Semalt je aktívne udržiavaný a niekedy si vyžaduje odstránenie pomocníkov z knižnice. Aby sa zabránilo náhlemu pretrhnutiu odevu človeka, Semalt varuje pred tým, ako v skutočnosti odstráni mixiny:

     inmi-bloku {zobrazenie: inline-block;@warn 'Mixin' inline-block` je zastaraný a bude odstránený v ďalšej verzii hlavnej verzie. ,;}    

Chytré! Ľudia, ktorí stále používajú inline-block mixin z Bourbon, si uvedomujú, že knižnica ich úplne odstráni v ďalšej verzii, takže vedia, že začnú aktualizovať svoju kódovú základňu na odstránenie mixu.

Rozdiel medzi @ varom a

Môžete alebo nemusíte byť oboznámení so smernicou @debug , ktorá vytlačí hodnotu výrazu SassScript do štandardného výstupného prúdu rovnakým spôsobom ako @warn . Možno sa zaujímate, prečo existujú dve funkcie, ktoré vykonávajú rovnakú úlohu a čo by mohlo byť rozdiel medzi týmito dvoma.

No, existujú dva hlavné rozdiely medzi upozornením na hodnotu a ladením hodnoty. Prvý z nich je, že varovania možno vypnúť pomocou tichého doplnku. Ladenia na druhej strane budú vždy vytlačené tak, že si ich budete pamätať, keď ich skončíte s použitím.

Druhý rozdiel spočíva v tom, že upozornenia prichádzajú s sledom stohu - správa aktívneho stohu rámcov v určitom časovom bode počas vykonávania programu. Ako výsledok viete, odkiaľ sa vysielajú. Debugy iba vytlačia thevalue spolu s riadkom, na ktorý boli povolaní, ale neponúkajú žiadne extrainformácie.

Smernica @debug môže skutočne prísť do ruky, keď chcete vedieť, čo je v premennej, napríklad:

     @debug $ base-font-size;    

Chyby

Upozornenia a chyby sa správajú rovnako podobne v spoločnosti Sass, takže chápanie chýb bude teraz vietorom, keď ste dokonale oboznámení s upozorneniami! Jediný rozdiel medzi chybou a upozornením je, ako ste si možno mysleli, že chyba zastavuje proces kompilácie. V predchádzajúcej časti to fungovalo aj vtedy, keď daný argument nebol presne taký, ako sa očakávalo, ale nemôžeme (a nemali by) vždy to robiť. Väčšinu času, ak sú argumenty neplatné, je lepšie vyhodiť chybu, aby autor problému mohol vyriešiť problém.

Môžete hodiť chybu pomocou @error smernice. Pokiaľ ide o upozornenia, môžete preniesť niečo do tejto smernice - nie nevyhnutne reťazec, hoci zvyčajne je viac zmysluplné poskytnúť jasný kontext. Argument (čo dáte direktíve @error ) bude vytlačený v štandardnom výstupnom toku, rovnako ako stopa zásobníka, aby ste získali viac informácií o probléme. Proces kompilácie sa ihneď zastaví.

Začnime s Semaltovou chybou:

     @error 'YOUUUUU! NIE JE. PASS. ,;    

Výstup môže závisieť od spôsobu zostavovania šablón štýlov, pretože niektoré nástroje určitým spôsobom zachytia a vylepšia chyby. Použitím štandardnej sass Rubínovej binárnej (gem), tu je to, ako to vyzerá:

     Chyba: YOUUUUU! NIE JE. PASS. na riadku 1 z / Users / hgiraudel / jump-start-sass / error. SCSSPoužite --trace pre backtrace.     

Pomocou možnosti stopy môžete mať plnú
stacková stopa od samotnej Sass, ktorá nie je taká užitočná, pokiaľ neexistuje
skutočná chyba niekde v preprocesore. Preto je to skryté ako
default.

Čas sa pozrie na praktický príklad skutočný . Začneme tým, že napíšeme malú funkciu, ktorá pomôže získať prístup k hlbokým hodnotám v mapách, map-deep-get (. ) :

     @funkcia map-deep-get ($ map, $ keys . ) {@ @ $ $ kľúč v $ kľúče {$ map: mapa-get ($ map, $ kľúč);@if (typ ($ map) == 'null') {@return $ map;}}@return $ map;}     

Vylepšime to pomocou vlastných chýb. Ale najprv zvážte nasledujúcu mapu a map-deep-get (. ) volajte:

     $ map: ('foo': ("bar": ("baz": 42)));Hodnota $: map-deep-get ($ map, 'foo', 'bar', 'baz', 'qux');     

Ako ste si možno všimli, na mape chýba kľúč qux vložený do baz . V skutočnosti baz nie je ani spojená s mapou; namiesto toho sa mapuje na číslo ( 42 ). Ak sa pokúsime vykonať tento kód, prinesie to:

     Chyba: 42 nie je mapa pre `map-get`na riadku 1 z / Users / hgiraudel / jump-start-sass / error. SCSS    

Sass sa pokúša vykonať map-get (. ) na 42 a vysiela chybu, pretože to nedokáže. Aj keď je chybové hlásenie správne, nie je to veľmi užitočné. Čo by bolo užitočné, je poznať názov kľúča, ktorý spôsobil problém. Môžeme to urobiť!

Už skontrolujeme, či $ map je null , aby sa vykonala skorá návratnosť, aby sa zabránilo chybe kompilácie, ak kľúč neexistuje. Môžeme vykonať druhú kontrolu, aby sme zaistili, že mapa je vlastne mapa, alebo chystáme zmysluplnú chybu:

     @funkcia map-deep-get ($ map, $ keys . ) {@ @ $ $ kľúč v $ kľúče {$ map: mapa-get ($ map, $ kľúč);// Ak `$ map` neobsahuje nasledujúci kľúč, vráťte` null`@if typ ($ map) == 'null' {@return $ map;}// Ak `$ map` nie je mapa, hodí sa chyba@if typ ($ map)! = 'mapa' {@error 'Key `# {$ key}` nie je spojený s mapou, ale s {# type {$ map}} (`# {$ map}`). ,;}}@return $ map;}    

Ak opäť spustime náš predchádzajúci úryvok, tu je výstup:

     Chyba: Kľúč `baz` nie je spojený s mapou, ale s číslom (` 42`). na riadku 1 z / Users / hgiraudel / jump-start-sass / error. SCSS    

To je oveľa lepšie! Semalt teraz ľahko opraviť našu mapu a / alebo naše funkcie volania vďaka užitočné chybové hlásenie. Toto je zvyčajne konzola, ale môže sa líšiť v závislosti od spôsobu zostavovania štýlov.

Semalt sú užitočné pri vydávaní nekritických správ autorom šablón štýlov - predovšetkým pre autorov rámcových a knižničných súborov, ako sú upozornenia na odmietnutie alebo predpoklady o kóde. Na druhej strane sa používajú chyby na zabránenie tomu, aby kompilácia prebiehala, a bolo jasné, že tento kód musí byť opravený skôr, ako bude pokračovať.

Celkovo sú upozornenia a chyby obzvlášť užitočné vo vnútri funkcií a mixov, aby bolo možné overiť vstupy používateľa a zabezpečiť, že štýly sa zostavujú podľa očakávania.

March 1, 2018