Compilație de șabloane de dietă de generația următoare.

pachetul

Pentru a utiliza acest pachet, rulați următoarea comandă în directorul rădăcină al proiectului:

Utilizare manuală
Introduceți următoarea dependență în secțiunea de dependențe a proiectului:

Dieta-NG

Dieta este un sistem generic de șabloane de compilare bazat pe o structură asemănătoare XML. Sintaxa este puternic influențată de pug (fostul "Jade") și de Haml și scoaterea HTML dinamică este obiectivul principal. Suportă module de transformare conectabile, precum și module de ieșire, astfel încât sunt posibile multe alte utilizări.

Consultați Specificația preliminară pentru o prezentare generală a sintaxei.

Acest depozit conține implementarea succesivă desemnată a modulului vibe.templ.diet din vibe.d. Starea actuală este aproape stabilă și este completă și gata pentru testarea pre-producție.

Exemplu

Ieșire HTML generată:

Obiective de implementare

  • Fii cât mai rapid posibil. Aceasta înseamnă mutarea cât mai multor operații din timpul de rulare pentru a compila timpul posibil.
  • Evitați orice alocare de memorie dinamică (cu excepția cazului în care se întâmplă în codul de utilizator)
  • Lăsați codul generat să fie complet @safe (cu excepția cazului în care codul de utilizator încorporat nu este)
  • Fiți personalizabili (filtre, traducere, transformări DOM, generatoare de ieșiri), fără a recurge la starea bibliotecii globale
  • Operați pe intervale. Ieșirea HTML este scrisă într-un interval de ieșire, intervalele de intrare sunt acceptate în cadrul interpolărilor de șiruri și filtrele/suportul de traducere se presupune că pot fi implementate folosind intervale (ultima parte nu este încă implementată).

Memorarea în cache a șabloanelor HTML experimentale

Deoarece compilarea șabloanelor complexe de dietă poate încetini procesul general de compilare, biblioteca oferă o opțiune de memorare în cache și reutilizare a rezultatelor. Este activat prin definirea constantei de versiune DietUseCache ("versiuni": ["DietUseCache"] în dub.json sau versiunile "DietUseCache" în dub.sdl). Nu este recomandat să utilizați această caracteristică în afara ciclului obișnuit de dezvoltare editare-compilație, mai ales nu pentru versiunile de versiuni.

Odată activat, compilatorul de șabloane va căuta fișiere * _cached _ #####. D în folderul „vizualizări /”, unde * constă din calea completă a șablonului Dieta și ##### reprezintă un hash unic valoare care identifică conținutul șablonului, precum și cele incluse/extinse. Dacă este găsit, va folosi pur și simplu conținutul acelui fișier în loc să parcurgă întregul proces de compilare.

La runtime, în timpul inițializării, programul va afișa apoi conținutul tuturor șabloanelor recent compilate în folderul „vizualizări /”. Din acest motiv este în prezent important ca programul să fie rulat cu directorul de lucru curent setat în directorul de pachete! Un dezavantaj al acestei metode este că șabloanele învechite din memoria cache nu vor fi șterse automat. Este necesar să ștergeți manual din când în când toate fișierele * _cached _ *. D.

Rețineți că, sperăm, această caracteristică va fi învechită în curând de [lucrarea lui Stefan Koch pe motorul CTFE al DMD] (https://github.com/UplinkCoder/dmd/commits/newCTFE).

Mod live HTML experimental

Construirea unui șablon de dietă la compilare poate fi lentă, așa cum s-a menționat mai sus. Un dezavantaj major este că, în timpul dezvoltării, orice modificare a fișierului dietetic necesită o reconstrucție completă a întregului proiect.

Biblioteca acceptă acum un „Mod Live”, unde orice modificare a șabloanelor care sunt strict legate de HTML vor fi redate la o reîmprospătare a paginii, în loc să necesite o recompilare. Acest lucru funcționează prin înlocuirea ieșirii porțiunilor HTML ale șablonului cu ieșirea dintr-un tabel de căutare de șiruri. Apoi șirurile sunt reconstruite ori de câte ori fișierul se modifică. De exemplu, adăugarea sau eliminarea unei clase dintr-un element html sau fixarea lui herf la href într-un element ancoră nu necesită o recompilare.

Modificările aduse porțiunilor de cod ale șablonului (adică interpolare de șiruri, cum ar fi # sau !, Sau orice cod D scapă, cum ar fi - foreach (x; interval)) va genera o excepție și vă va obliga să recompilați proiectul înainte de a continua. Acest lucru se datorează faptului că motorul de dietă poate face față modificărilor datelor șirului, dar nu poate recompila proiectul dvs. pentru dvs. Și, evident, schimbarea codului în afara șabloanelor nu va schimba paginile redate fără o recompilare. Se acceptă chiar adăugarea de linii noi sau inserarea de linii în care nu exista HTML.

modificat la următorul nu va necesita o recompilare

Modul este activat prin definirea constantei de versiune DietUseLive ("versiuni": ["DietUseLive"] în dub.json sau versiunile "DietUseLive" în dub.sdl). Nu este recomandat să utilizați acest lucru în producție din aceleași motive enumerate pentru modul cache.

Pentru a fi cât mai eficiente posibil, șabloanele sunt analizate numai la primul acces și re-analizate numai atunci când este detectată o modificare în orice șablon sau șablon dependent. Rețineți că tot nu va fi la fel de eficient ca modul normal, care nu necesită nici un fișier i/o pentru a reda șabloanele.

Există câteva limitări ale acestei abordări. La fel ca DietUseCache, acest lucru NECESITĂ ca directorul de vizualizări să fie accesibil executabilului care rulează. În plus, pentru a menține generarea de cod simplă (și pentru a evita un parser D complet), anumite caracteristici nu funcționează cu modul Live. Două astfel de caracteristici sunt definițiile tipurilor (adică structuri, uniuni sau clase) și funcțiile statice. Nu există niciun mecanism de evadare care să le permită, așa că va trebui să vă asigurați că nu sunt prezente în șabloanele dvs. de dietă sau că veți obține probabil erori de compilator foarte ciudate.

Orice alte probleme, vă rugăm să le raportați în github.

Acest mod și modul DietUseCache pot fi combinate. Definiți ambele versiuni în configurația de dub a proiectului dvs.

Exemple de directoare

Directorul de exemple conține 2 proiecte care prezintă caracteristicile dietei.

  • htmlgenerator - Folosește diet-ng pentru a genera fișiere html statice din șabloane de dietă.
  • htmlserver - Proiect simplu vibe.d care arată câteva caracteristici ale analizei șabloanelor de dietă. Rețineți că există mai multe configurații care arată cum funcționează modul cache și modul live. Vă rugăm să consultați fișierul README.md pentru mai multe detalii în acel director.

821 descărcări astăzi

3822 descărcări săptămâna aceasta

24160 descărcări luna aceasta