EJS
Modelos JavaScript incorporados
Instalación
1$ npm install ejs
características
- Control de fluxo con
<% %>
- Saída de escape con
<%= %>
(función de escape configurable) - Saída en bruto sen escape con
<%- %>
- Modo de recorte de nova liña ('slurping newline') con
-%>
etiqueta de finalización - Modo de recorte de espazos en branco (engade todos os espazos en branco) para controlar o fluxo
<%_ _%>
- Delimitadores personalizados (por exemplo, use
<? ?>
en lugar de<% %>
) - Inclúe
- Soporte do lado do cliente
- Caché estático de JavaScript intermedio
- Caché estático de modelos
- Cumpre co sistema de visualización Express
Exemplo
1
2
3<% if (user) { %>
<h2><%= user.name %></h2>
<% } %>
Proba EJS en liña en: https://ionicabizau.github.io/ejs-playground/ .
Uso
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
});
Tamén é posible usar ejs.render(dataAndOptions);
onde pasas todo nun único obxecto. Nese caso, acabarás con variables locais para todas as opcións pasadas. Non obstante, teña en conta que o teu código podería romperse se engadimos unha opción co mesmo nome como unha das propiedades do teu obxecto de datos. Polo tanto, non recomendamos usar este atallo.
Opcións
cache
As funcións compiladas son almacenadas na caché, o que requirefilename
filename
O nome do ficheiro que se está a renderizar. Non é necesario se estás a usarrenderFile()
. Úsase porcache
para teclear cachés e para incluír.root
Establece a raíz do proxecto para inclusións cunha ruta absoluta (/file.ejs).context
Contexto de execución da funcióncompileDebug
Candofalse
non se compila ningunha instrumentación de depuraciónclient
Candotrue
, compila unha función que se pode renderizar no navegador sen necesidade de cargar o tempo de execución de EJS ( ejs.min.js ).delimiter
Carácter para usar con soportes angulares para abrir/pechardebug
Corpo da función xerada de saídastrict
Cando se define comotrue
, a función xerada está en modo estrito_with
Se deben usarwith() {}
construcións ou non. Sefalse
entón, os locais almacenaranse nolocals
obxecto. Establécesefalse
en modo estrito.localsName
Nome que se usará para o obxecto que almacena variables locais cando non se utilizawith
Valores predeterminados paralocals
rmWhitespace
Elimina todos os espazos en branco seguros para eliminar, incluídos os espazos en branco inicial e final. Tamén permite unha versión máis segura do-%>
slurping de liñas para todas as etiquetas de scriptlet (non elimina as novas liñas de etiquetas no medio dunha liña).escape
A función de escape usada con<%=
construct. Úsase no renderizado e edícase.toString()
na xeración de funcións cliente (por defecto escape XML).outputFunctionName
Establécese nunha cadea (por exemplo, 'echo' ou 'print') para unha función para imprimir a saída dentro das etiquetas de scriptlet.
Este proxecto usa JSDoc . Para obter a documentación pública completa da API, clona o repositorio e executa npm run doc
. Isto executará JSDoc coas opcións adecuadas e enviará a documentación a out/
. Se queres a documentación da API pública e privada, executa npm run devdoc
no seu lugar.
Etiquetas
<%
Etiqueta 'Scriptlet', para control-flow, sen saída<%_
Etiqueta de scriptlet 'Whitspace Slurping', elimina todos os espazos en branco anteriores<%=
Mostra o valor no modelo (escapado)<%-
Mostra o valor sen escape no modelo<%#
Etiqueta de comentario, sen execución, sen saída<%%
Sae un literal "<%"%%>
Sae un literal '%>'%>
Etiqueta final simple-%>
Etiqueta de modo de recorte ('slurp newline'), recorta despois de nova liña_%>
Etiqueta de finalización 'Slurping de espazos en branco', elimina todos os espazos en branco despois
Para ver a documentación de sintaxe completa, consultedocs/syntax.md.
Inclúe
As inclusións teñen que ser un camiño absoluto ou, se non, asúmense como relativas ao modelo coa include
chamada. Por exemplo, se estás incluíndo ./views/user/show.ejs
desde ./views/users.ejs
usarías <%- include('user/show') %>
.
Debes especificar a filename
opción para o modelo coa include
chamada a non ser que esteas a usar renderFile()
.
Probablemente quererá usar a etiqueta de saída en bruto ( <%-
) coa súa inclusión para evitar que se faga dobre escape na saída HTML.
1
2
3
4
5<ul>
<% users.forEach(function(user){ %>
<%- include('user/show', {user: user}) %>
<% }); %>
</ul>
As inclusións insírense en tempo de execución, polo que podes usar variables para a ruta da
include
chamada (por exemplo <%- include(somePath) %>
). As variables do teu obxecto de datos de nivel superior están dispoñibles para todas as inclusións, pero hai que transmitir as variables locais.
NOTA: Incluír directivas de preprocesador ( <% include user/show %>
) aínda son compatibles.
Delimitadores personalizados
Os delimitadores personalizados pódense aplicar por modelo ou globalmente:
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'
Almacenamento en caché
EJS envíase cunha caché básica en proceso para almacenar na caché as funcións intermedias de JavaScript utilizadas para renderizar modelos. É doado conectar a caché LRU usando a lru-cache
biblioteca de Node:
1
2
3let ejs = require('ejs'),
LRU = require('lru-cache');
ejs.cache = LRU(100); // LRU cache with 100-item limit
Se queres borrar a caché de EJS, chama a ejs.clearCache
. Se estás a usar a caché LRU e necesitas un límite diferente, simplemente restablece ejs.cache
unha nova instancia da LRU.
Cargador de ficheiros personalizado
O cargador de ficheiros predeterminado é fs.readFileSync
, se queres personalizalo, podes configurar ejs.fileLoader.
1
2
3
4
5
6let ejs = require('ejs');
let myFileLoad = function (filePath) {
return 'myFileLoad: ' + fs.readFileSync(filePath);
};
ejs.fileLoader = myFileLoad;
Con esta función, pode preprocesar o modelo antes de lelo.
Deseños
EJS non admite especificamente bloques, pero os deseños pódense implementar incluíndo cabeceiras e pés de páxina, así:
1
2
3
4
5
6
7
8<%- include('header') -%>
<h1>
Title
</h1>
<p>
My page
</p>
<%- include('footer') -%>
Soporte do lado do cliente
Vaia á última versión , descarga
./ejs.js
ou ./ejs.min.js
. Alternativamente, pode compilalo vostede mesmo clonando o repositorio e executando jake build
(ou $(npm bin)/jake build
se jake non está instalado globalmente).
Inclúe un destes ficheiros na túa páxina e ejs
debería estar dispoñible en todo o mundo.
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
A maioría de EJS funcionará como se esperaba; non obstante, hai que ter en conta algunhas cousas:
- Obviously, xa que non tes acceso ao sistema de ficheiros,
ejs.renderFile()
non funcionará. Polo mesmo motivo,
include
s non funcionan a menos que utilices uninclude callback
. Aquí tes un exemplo: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 de DigitalBrainstem
Proxectos relacionados
Hai unha serie de implementacións de EJS:
- Implementación de TJ, a v1 desta biblioteca: https://github.com/tj/ejs
- EJS de Jupiter Consulting: http://www.embeddedjs.com/
- EJS Embedded JavaScript Framework en Google Code: https://code.google.com/p/embeddedjavascript/
- Implementación de Ruby de Sam Stephenson: https://rubygems.org/gems/ejs
- Erubis, unha implementación de ERB que tamén executa JavaScript: http://www.kuwata-lab.com/erubis/users-guide.04.html#lang-javascript
- Soporte de idiomas DigitalBrainstem EJS: https://github.com/Digitalbrainstem/ejs-grammar
Licenza
Licenzada baixo a licenza Apache, versión 2.0 ( http://www.apache.org/licenses/LICENSE-2.0 )
Modelos JavaScript incorporados de EJS copyright 2112 mde@fleegix.org.