EJS
Ingebedde JavaScript-sjablonen
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
10let 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 gebruiktrenderFile()
. Wordt gebruikt doorcache
voor sleutelcaches en voor include.root
Stel de projecthoofdmap voor include in met een absoluut pad (/file.ejs).context
Context van functie-uitvoeringcompileDebug
Wanneer erfalse
geen foutopsporingsinstrumentatie is gecompileerdclient
Whentrue
compileert 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/sluitendebug
Uitvoer gegenereerde functietekststrict
Wanneer ingesteld optrue
, bevindt de gegenereerde functie zich in de strikte modus_with
with() {}
Of er wel of niet constructies moeten worden gebruikt . Alsfalse
de lokale waarden in het object worden opgeslagenlocals
, staat dezefalse
in de strikte modus.localsName
Naam die moet worden gebruikt voor het object dat lokale variabelen opslaat wanneerwith
standaardwaarden 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 devdoc
deze 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 include
aanroep. Als u bijvoorbeeld ' ./views/user/show.ejs
from' opneemt ./views/users.ejs
, gebruikt u <%- include('user/show') %>
.
U moet de filename
optie 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
include
aanroep (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
11let 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-cache
bibliotheek:
1
2
3let 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.cache
naar 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
6let 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.js
of ./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 build
als jake niet wereldwijd is geïnstalleerd).
Voeg een van deze bestanden toe aan uw pagina en ejs
zou 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:
- Obviously, omdat u geen toegang hebt tot het bestandssysteem,
ejs.renderFile()
zal niet werken. Om dezelfde reden
include
werken s alleen als u een gebruiktinclude callback
. Hier is een voorbeeld:1 2 3 4 5 6 7 8 9let 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
Gerelateerde projecten
Er zijn een aantal implementaties van EJS:
- TJ's implementatie, de v1 van deze bibliotheek: https://github.com/tj/ejs
- EJS van Jupiter Consulting: http://www.embeddedjs.com/
- EJS ingebed JavaScript-framework op Google-code: https://code.google.com/p/embeddedjavascript/
- De Ruby-implementatie van Sam Stephenson: https://rubygems.org/gems/ejs
- Erubis, een ERB-implementatie die ook JavaScript uitvoert: http://www.kuwata-lab.com/erubis/users-guide.04.html#lang-javascript
- DigitalBrainstem EJS Taalondersteuning: https://github.com/Digitalbrainstem/ejs-grammar
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.