Geweldige gemeenschapsmodule

EJS

Ingebedde JavaScript-sjablonen

Bouwstatus Afhankelijkheden ontwikkelen Bekende kwetsbaarheden

Installatie

1
$ npm install ejs

Functies

  • Controlestroom met<% %>
  • Escape-uitgang met <%= %>(escape-functie configureerbaar)
  • Ongeëscapede onbewerkte uitvoer met<%- %>
  • Nieuwe regel-trimmodus ('nieuwe regel slurpen') met -%>eindtag
  • Witruimte-trimmodus (alle witruimte opslurpen) voor controlestroom met<%_ _%>
  • Aangepaste scheidingstekens (gebruik bijvoorbeeld <? ?>in plaats van <% %>)
  • Inclusief
  • Ondersteuning aan de cliëntzijde
  • Statische caching van tussenliggend JavaScript
  • Statische caching van sjablonen
  • Voldoet aan het Express View-systeem

Voorbeeld

1 2 3
<% if (user) { %> <h2><%= user.name %></h2> <% } %>

Probeer EJS online op: https://ionicabizau.github.io/ejs-playground/ .

Gebruik

1 2 3 4 5 6 7 8 9 10
let template = ejs.compile(str, options); template(data); // => Rendered HTML string ejs.render(str, data, options); // => Rendered HTML string ejs.renderFile(filename, data, options, function(err, str){ // str => Rendered HTML string });

Het is ook mogelijk om te gebruiken ejs.render(dataAndOptions);waarbij u alles in één object doorgeeft. In dat geval krijgt u lokale variabelen voor alle doorgegeven opties. Houd er echter rekening mee dat uw code kapot kan gaan als we een optie toevoegen met dezelfde optie. name als een van de eigenschappen van uw gegevensobject. Daarom raden we u af deze snelkoppeling te gebruiken.

Opties

  • cache Gecompileerde functies worden in de cache opgeslagen, waardoor ze nodig zijnfilename
  • filename De naam van het bestand dat wordt weergegeven. Niet vereist als u gebruikt renderFile(). Wordt gebruikt door cachevoor sleutelcaches en voor include.
  • root Stel de projecthoofdmap voor include in met een absoluut pad (/file.ejs).
  • context Context van functie-uitvoering
  • compileDebug Wanneer er falsegeen foutopsporingsinstrumentatie is gecompileerd
  • client When truecompileert een functie die in de browser kan worden weergegeven zonder dat de EJS Runtime ( ejs.min.js ) hoeft te worden geladen.
  • delimiter Teken te gebruiken met hoekbeugels voor openen/sluiten
  • debug Uitvoer gegenereerde functietekst
  • strict Wanneer ingesteld op true, bevindt de gegenereerde functie zich in de strikte modus
  • _withwith() {}Of er wel of niet constructies moeten worden gebruikt . Als falsede lokale waarden in het object worden opgeslagen locals, staat deze falsein de strikte modus.
  • localsName Naam die moet worden gebruikt voor het object dat lokale variabelen opslaat wanneer withstandaardwaarden niet worden gebruiktlocals
  • rmWhitespace Verwijder alle witruimte die veilig kan worden verwijderd, inclusief witruimte vooraan en achteraan. Het maakt ook een veiligere versie van -%>regelslurpen mogelijk voor alle scriptlettags (nieuwe regels met tags worden niet in het midden van een regel verwijderd).
  • escape De escape-functie die wordt gebruikt bij <%=construct. Deze wordt gebruikt bij het renderen en wordt .toString()gebruikt bij het genereren van clientfuncties. (Escapes worden standaard in XML uitgevoerd).
  • outputFunctionName Stel een string in (bijvoorbeeld 'echo' of 'print') zodat een functie uitvoer binnen scriptlet-tags kan afdrukken.

Dit project maakt gebruik van JSDoc . Voor de volledige openbare API-documentatie kloont u de repository en voert u uit npm run doc. Hierdoor wordt JSDoc met de juiste opties uitgevoerd en wordt de documentatie uitgevoerd naar out/. Als u zowel de openbare als de privé-API-documenten wilt, voert u npm run devdocdeze uit.

Labels

  • <% 'Scriptlet'-tag, voor control-flow, geen uitvoer
  • <%_ 'Whitespace Slurping' Scriptlet-tag, verwijdert alle witruimte ervoor
  • <%= Voert de waarde uit in de sjabloon (escaped)
  • <%- Voert de waarde zonder escapecodes uit naar de sjabloon
  • <%# Commentaartag, geen uitvoering, geen uitvoer
  • <%% Voert een letterlijke '<%' uit
  • %%> Voert een letterlijke '%>' uit
  • %> Duidelijke eindtag
  • -%> Trim-modus ('newline slurp') tag, trimt na newline
  • _%> 'Whitespace Slurping' eindtag, verwijdert alle witruimte erna

Voor de volledige syntaxisdocumentatie, ziedocs/syntax.md.

Inclusief

Includes moeten ofwel een absoluut pad zijn, of, als dat niet het geval is, worden aangenomen dat ze relatief zijn ten opzichte van de sjabloon met de includeaanroep. Als u bijvoorbeeld ' ./views/user/show.ejsfrom' opneemt ./views/users.ejs, gebruikt u <%- include('user/show') %>.

U moet de filenameoptie voor de sjabloon bij de include aanroep opgeven, tenzij u renderFile().

U zult waarschijnlijk de onbewerkte uitvoertag ( <%-) willen gebruiken met uw include om te voorkomen dat de HTML-uitvoer dubbel wordt geëscaped.

1 2 3 4 5
<ul> <% users.forEach(function(user){ %> <%- include('user/show', {user: user}) %> <% }); %> </ul>

Includes worden tijdens runtime ingevoegd, zodat u variabelen kunt gebruiken voor het pad in de includeaanroep (bijvoorbeeld <%- include(somePath) %>). Variabelen in uw gegevensobject op het hoogste niveau zijn beschikbaar voor al uw include-bestanden, maar lokale variabelen moeten worden doorgegeven.

OPMERKING: Het opnemen van preprocessorrichtlijnen ( <% include user/show %>) wordt nog steeds ondersteund.

Aangepaste scheidingstekens

Aangepaste scheidingstekens kunnen per sjabloon of globaal worden toegepast:

1 2 3 4 5 6 7 8 9 10 11
let ejs = require('ejs'), users = ['geddy', 'neil', 'alex']; // Just one template ejs.render('<?= users.join(" | "); ?>', {users: users}, {delimiter: '?'}); // => 'geddy | neil | alex' // Or globally ejs.delimiter = '$'; ejs.render('<$= users.join(" | "); $>', {users: users}); // => 'geddy | neil | alex'

Caching

EJS wordt geleverd met een standaard in-process cache voor het cachen van de tussenliggende JavaScript-functies die worden gebruikt om sjablonen weer te geven. Het is eenvoudig om LRU-caching aan te sluiten met behulp van de Node- lru-cachebibliotheek:

1 2 3
let ejs = require('ejs'), LRU = require('lru-cache'); ejs.cache = LRU(100); // LRU cache with 100-item limit

Als u de EJS-cache wilt wissen, belt u ejs.clearCache. Als u de LRU-cache gebruikt en een andere limiet nodig heeft, kunt u eenvoudigweg resetten ejs.cachenaar een nieuw exemplaar van de LRU.

Aangepaste bestandslader

De standaard bestandslader is fs.readFileSync. Als u deze wilt aanpassen, kunt u ejs.fileLoader instellen.

1 2 3 4 5 6
let ejs = require('ejs'); let myFileLoad = function (filePath) { return 'myFileLoad: ' + fs.readFileSync(filePath); }; ejs.fileLoader = myFileLoad;

Met deze functie kunt u de sjabloon voorbewerken voordat u deze leest.

Indelingen

EJS ondersteunt niet specifiek blokken, maar lay-outs kunnen worden geïmplementeerd door kop- en voetteksten op te nemen, zoals:

1 2 3 4 5 6 7 8
<%- include('header') -%> <h1> Title </h1> <p> My page </p> <%- include('footer') -%>

Ondersteuning aan de cliëntzijde

Ga naar de nieuwste release , download ./ejs.jsof ./ejs.min.js. Als alternatief kunt u het zelf compileren door de repository te klonen en uit te voeren jake build(of $(npm bin)/jake buildals jake niet wereldwijd is geïnstalleerd).

Voeg een van deze bestanden toe aan uw pagina en ejszou wereldwijd beschikbaar moeten zijn.

Example

1 2 3 4 5 6 7 8 9 10
<div id="output"></div> <script src="ejs.min.js"></script> <script> let people = ['geddy', 'neil', 'alex'], html = ejs.render('<%= people.join(", "); %>', {people: people}); // With jQuery: $('#output').html(html); // Vanilla JS: document.getElementById('output').innerHTML = html; </script>

Caveats

Het grootste deel van EJS zal werken zoals verwacht; er zijn echter een paar dingen waar u rekening mee moet houden:

  1. Obviously, omdat u geen toegang hebt tot het bestandssysteem, ejs.renderFile()zal niet werken.
  2. Om dezelfde reden includewerken s alleen als u een gebruikt include callback. Hier is een voorbeeld:

    1 2 3 4 5 6 7 8 9
    let str = "Hello <%= include('file', {person: 'John'}); %>", fn = ejs.compile(str, {client: true}); fn(data, null, function(path, d){ // include callback // path -> 'file' // d -> {person: 'John'} // Put your code here // Return the contents of file as a string }); // returns rendered string

IDE Integration with Syntax Highlighting

VSCode: Javascript EJS van DigitalBrainstem

Er zijn een aantal implementaties van EJS:

Licentie

Gelicentieerd onder de Apache-licentie, versie 2.0 ( http://www.apache.org/licenses/LICENSE-2.0 )


EJS Embedded JavaScript-sjablonen copyright 2112 mde@fleegix.org.