EJS
Modelli JavaScript incorporati
Installazione
1$ npm install ejs
Caratteristiche
- Controlla il flusso con
<% %> - Uscita di escape con
<%= %>(funzione di escape configurabile) - Output grezzo senza escape con
<%- %> - Modalità di ritaglio di nuova riga ("newline slurping") con
-%>tag finale - Modalità di taglio degli spazi bianchi (slurp tutti gli spazi bianchi) per il controllo del flusso con
<%_ _%> - Delimitatori personalizzati (ad esempio, utilizzare
<? ?>al posto di<% %>) - Include
- Supporto lato client
- Caching statico di JavaScript intermedio
- Caching statico dei modelli
- Conforme al sistema di visualizzazione Express
Esempio
1
2
3<% if (user) { %>
<h2><%= user.name %></h2>
<% } %>
Prova EJS online su: https://ionicabizau.github.io/ejs-playground/ .
Utilizzo
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
});
È anche possibile usare ejs.render(dataAndOptions);dove passi tutto in un singolo oggetto. In tal caso, ti ritroverai con variabili locali per tutte le opzioni passate. Tuttavia, tieni presente che il tuo codice potrebbe rompersi se aggiungiamo un'opzione con lo stesso name come una delle proprietà dell'oggetto dati. Pertanto, non consigliamo di utilizzare questa scorciatoia.
Opzioni
cacheLe funzioni compilate vengono memorizzate nella cache, richiedendofilenamefilenameIl nome del file di cui viene eseguito il rendering. Non richiesto se si utilizzarenderFile(). Utilizzato dacacheper le cache delle chiavi e per gli include.rootImposta la radice del progetto per gli include con un percorso assoluto (/file.ejs).contextContesto di esecuzione della funzionecompileDebugQuandofalsenon viene compilata alcuna strumentazione di debugclientWhentrue, compila una funzione che può essere renderizzata nel browser senza la necessità di caricare EJS Runtime ( ejs.min.js ).delimiterCarattere da utilizzare con parentesi angolari per aprire/chiuderedebugCorpo della funzione generata dall'outputstrictSe impostato sutrue, la funzione generata è in modalità rigorosa_withSe utilizzare o menowith() {}i costrutti. Infalsetal caso le variabili locali verranno archiviate nell'oggettolocals. Impostate sufalsein modalità rigorosa.localsNameNome da utilizzare per l'oggetto che memorizza le variabili locali quando non si utilizzanowithi DefaultlocalsrmWhitespaceRimuove tutti gli spazi bianchi sicuri da rimuovere, inclusi gli spazi bianchi iniziali e finali. Abilita inoltre una versione più sicura del-%>line slurping per tutti i tag scriptlet (non elimina le nuove righe di tag nel mezzo di una riga).escapeLa funzione di escape utilizzata con<%=build. Viene utilizzata nel rendering e viene.toString()modificata nella generazione di funzioni client (per impostazione predefinita, evita XML).outputFunctionNameImpostato su una stringa (ad esempio, 'echo' o 'print') affinché una funzione stampi l'output all'interno dei tag scriptlet.
Questo progetto utilizza JSDoc . Per la documentazione completa dell'API pubblica, clona il repository ed esegui npm run doc. Questo eseguirà JSDoc con le opzioni appropriate e restituirà la documentazione a out/. Se desideri sia la documentazione API pubblica che quella privata, esegui npm run devdocinvece.
Tag
<%Tag 'Scriptlet', per flusso di controllo, nessun output<%_Tag Scriptlet 'Whitespace Slurping', rimuove tutti gli spazi bianchi prima di esso<%=Restituisce il valore nel modello (escape)<%-Restituisce il valore senza caratteri di escape nel modello<%#Tag di commento, nessuna esecuzione, nessun output<%%Restituisce un valore letterale '<%'%%>Restituisce un valore letterale '%>'%>Etichetta finale semplice-%>Tag modalità di taglio ("newline slurp"), taglia dopo il fine riga_%>Il tag finale 'Whitespace Slurping' rimuove tutti gli spazi bianchi dopo di esso
Per la documentazione completa sulla sintassi, vederedocs/syntax.md.
Include
Gli include devono essere un percorso assoluto oppure, in caso contrario, vengono considerati relativi al modello con la includechiamata. Ad esempio, se includi ./views/user/show.ejsda ./views/users.ejsdovresti utilizzare <%- include('user/show') %>.
È necessario specificare l' filenameopzione per il modello con la include
chiamata a meno che non si utilizzi renderFile().
Probabilmente vorrai utilizzare il tag di output non elaborato ( <%-) con il tuo include per evitare il doppio escape dell'output HTML.
1
2
3
4
5<ul>
<% users.forEach(function(user){ %>
<%- include('user/show', {user: user}) %>
<% }); %>
</ul>
Le inclusioni vengono inserite in fase di esecuzione, quindi puoi utilizzare variabili per il percorso nella
includechiamata (ad esempio <%- include(somePath) %>). Le variabili nell'oggetto dati di livello superiore sono disponibili per tutte le tue inclusioni, ma le variabili locali devono essere passate.
NOTA: le direttive Includi del preprocessore ( <% include user/show %>) sono ancora supportate.
Delimitatori personalizzati
I delimitatori personalizzati possono essere applicati in base al modello o a livello globale:
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'
Memorizzazione nella cache
EJS viene fornito con una cache in-process di base per memorizzare nella cache le funzioni JavaScript intermedie utilizzate per eseguire il rendering dei modelli. È facile collegare la cache LRU utilizzando la lru-cachelibreria di Node:
1
2
3let ejs = require('ejs'),
LRU = require('lru-cache');
ejs.cache = LRU(100); // LRU cache with 100-item limit
Se desideri svuotare la cache EJS, chiama ejs.clearCacheSe stai utilizzando la cache LRU e hai bisogno di un limite diverso, ripristina semplicemente ejs.cacheuna nuova istanza di LRU.
Caricatore di file personalizzato
Il caricatore di file predefinito è fs.readFileSync, se vuoi personalizzarlo, puoi impostare ejs.fileLoader.
1
2
3
4
5
6let ejs = require('ejs');
let myFileLoad = function (filePath) {
return 'myFileLoad: ' + fs.readFileSync(filePath);
};
ejs.fileLoader = myFileLoad;
Con questa funzione puoi preelaborare il modello prima di leggerlo.
Layout
EJS non supporta specificamente i blocchi, ma i layout possono essere implementati includendo intestazioni e piè di pagina, in questo modo:
1
2
3
4
5
6
7
8<%- include('header') -%>
<h1>
Title
</h1>
<p>
My page
</p>
<%- include('footer') -%>
Supporto lato client
Vai all'ultima versione , scarica
./ejs.jso ./ejs.min.js. In alternativa, puoi compilarlo tu stesso clonando il repository ed eseguendo jake build(o $(npm bin)/jake buildse jake non è installato a livello globale).
Includi uno di questi file nella tua pagina e ejsdovrebbe essere disponibile a livello globale.
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
La maggior parte di EJS funzionerà come previsto; tuttavia, ci sono alcune cose da notare:
- Obviously, poiché non hai accesso al filesystem,
ejs.renderFile()non funzionerà. Per lo stesso motivo,
includei s non funzionano a meno che non si utilizzi uninclude callback. Ecco un esempio: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
Codice VSC: Javascript EJS di DigitalBrainstem
Progetti correlati
Esistono numerose implementazioni di EJS:
- L'implementazione di TJ, la v1 di questa libreria: https://github.com/tj/ejs
- EJS di Jupiter Consulting: http://www.embeddedjs.com/
- Framework JavaScript incorporato EJS su Google Code: https://code.google.com/p/embeddedjavascript/
- Implementazione Ruby di Sam Stephenson: https://rubygems.org/gems/ejs
- Erubis, un'implementazione ERB che esegue anche JavaScript: http://www.kuwata-lab.com/erubis/users-guide.04.html#lang-javascript
- Supporto linguistico DigitalBrainstem EJS: https://github.com/Digitalbrainstem/ejs-grammar
Licenza
Concesso in licenza con la licenza Apache, versione 2.0 ( http://www.apache.org/licenses/LICENSE-2.0 )
Modelli JavaScript incorporati EJS copyright 2112 mde@fleegix.org.
