Impresionante módulo comunitario

EJS

Modelos JavaScript incorporados

Estado de construción Desenvolvemento de dependencias Vulnerabilidades coñecidas

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 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 });

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 usar renderFile(). Úsase por cachepara 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ón
  • compileDebug Cando falsenon se compila ningunha instrumentación de depuración
  • client Cando true, 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/pechar
  • debug Corpo da función xerada de saída
  • strict Cando se define como true, a función xerada está en modo estrito
  • _with Se deben usar with() {}construcións ou non. Se falseentón, os locais almacenaranse no localsobxecto. Establécese falseen modo estrito.
  • localsName Nome que se usará para o obxecto que almacena variables locais cando non se utiliza withValores 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 devdocno 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 includechamada. Por exemplo, se estás incluíndo ./views/user/show.ejsdesde ./views/users.ejsusarías <%- include('user/show') %>.

Debes especificar a filenameopció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 includechamada (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 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'

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-cachebiblioteca de Node:

1 2 3
let 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.cacheunha 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 6
let 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.jsou ./ejs.min.js. Alternativamente, pode compilalo vostede mesmo clonando o repositorio e executando jake build(ou $(npm bin)/jake buildse jake non está instalado globalmente).

Inclúe un destes ficheiros na túa páxina e ejsdeberí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:

  1. Obviously, xa que non tes acceso ao sistema de ficheiros, ejs.renderFile()non funcionará.
  2. Polo mesmo motivo, includes non funcionan a menos que utilices un include callback. Aquí tes un exemplo:

    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 de DigitalBrainstem

Hai unha serie de implementacións de EJS:

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.