Módulo comunitario incrible

EJS

Modelos de JavaScript incorporados

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

Instalación

1
$ npm install ejs

características

  • Controlar o fluxo con <% %>
  • Saída <%= %>escapada con (función de escape configurable)
  • Saída bruta sen escapar con <%- %>
  • Modo de recorte de nova liña ('newline slurping') con -%>etiqueta final
  • Modo de recorte de espazos en branco (borra todo o espazo en branco) para controlar o fluxo <%_ _%>
  • Delimitadores personalizados (por exemplo, usar <? ?>no canto de <% %>)
  • Inclúe
  • Asistencia do cliente
  • Almacenamento en caché estático de JavaScript intermedio
  • Almacenamento en 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 se pasa todo nun só obxecto. Nese caso, acabarás con variables locais para todas as opcións pasadas. Non obstante, teña en conta que o seu código podería romper se engadimos unha opción co mesmo. nome como unha das propiedades do obxecto de datos. Polo tanto, non recomendamos usar este atallo.

Opcións

  • cache As funcións compiladas están na caché, require filename
  • filename O nome do ficheiro que se está a renderizar. Non é necesario se o está a usar renderFile(). Usado por cachepara teclear cachés e para inclúe.
  • root Establecer raíz do proxecto para inclúe cun camiño absoluto (/file.ejs).
  • context Contexto de execución de funcións
  • compileDebug Cando falsenon se compila ningunha instrumentación de depuración
  • client Cando truecompila 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 parénteses angulares para abrir / pechar
  • debug Corpo de función xerada por saída
  • strict Cando se define como true, a función xerada está en modo estrito
  • _with Se se utilizan ou non with() {}construcións. Se falseentón os habitantes locais gardaranse no localsobxecto. Configúrase falseen modo estrito.
  • localsName Nome que se usará para o obxecto que almacena variables locais cando non se usa withPredeterminado 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ña para todas as etiquetas de scriptlet (non tira novas liñas de etiquetas no medio dunha liña).
  • escape A función de escape empregada con <%=construct. Utilízase na representación e .toString()edítase na xeración de funcións de cliente. (Por defecto, escápase de XML).
  • outputFunctionName Estableza unha cadea (por exemplo, "eco" ou "imprimir") para que unha función imprima saída dentro de etiquetas de scriptlet.

Este proxecto usa JSDoc . Para obter a documentación completa da API pública, clonar o repositorio e executalo npm run doc. Isto executará JSDoc coas opcións axeitadas e sairá a documentación out/. Se queres os documentos da API pública e privada, executa npm run devdocno seu lugar.

Etiquetas

  • <% Etiqueta "Scriptlet", para control de fluxo, sen saída
  • <%_ Etiqueta de scriptlet "Espazo en branco", elimina todo o espazo en branco antes que el
  • <%= Emite o valor no modelo (escapado)
  • <%- Emite o valor sen fuxir no modelo
  • <%# Etiqueta de comentario, sen execución, sen saída
  • <%% Emite un literal "<%"
  • %%> Produce un literal "%>"
  • %> Etiqueta de final sinxela
  • -%> Etiqueta de modo de recorte ('newline slurp'), recortes seguindo a nova liña
  • _%> Etiqueta de finalización "Espazo en branco", elimina todos os espazos en branco despois

Para ver a documentación completa da sintaxe, consulte docs/syntax.md.

Inclúe

Inclúe quere ter de ser unha ruta absoluta, ou, se non, asumen-se como en relación ao modelo co includechamada. Por exemplo, se está incluíndo ./views/user/show.ejsde ./views/users.ejsusaría <%- include('user/show') %>.

Debe especificar a filenameopción para o modelo coa include chamada a menos que estea a usar renderFile().

É probable que queiras usar a etiqueta de saída en bruto ( <%-) coa túa inclusión para evitar que escape dúas veces a saída HTML.

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

As inclusións insírense no tempo de execución, de xeito que podes usar variables para o camiño da includechamada (por exemplo <%- include(somePath) %>). As variables do teu obxecto de datos de nivel superior están dispoñibles para todas as túas incluídas, pero hai que transmitir as variables locais.

NOTA: <% include user/show %>aínda se admiten as directivas de preprocesador ( ).

Delimitadores personalizados

Os delimitadores personalizados pódense aplicar por modelo ou de forma global:

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'

Caché

EJS inclúe unha caché básica no proceso para almacenar en caché as funcións intermedias de JavaScript empregadas para renderizar modelos. É fácil conectar a caché LRU mediante 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é EJS, chama ejs.clearCache. Se estás a usar a caché LRU e necesitas un límite diferente, restablece ejs.cachea 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 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 bloques específicamente, 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') -%>

Asistencia do cliente

Vai á última versión , descarga ./ejs.jsou ./ejs.min.js. Alternativamente, podes compilala ti mesmo clonando o repositorio e executando jake build(ou $(npm bin)/jake buildse jake non está instalado globalmente).

Inclúa 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; con todo, hai algunhas cousas a destacar:

  1. Obviously, xa que non ten acceso ao sistema de ficheiros, ejs.renderFile()non funcionará.
  2. Pola mesma razón, includes non funcionan a non ser que use 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 por DigitalBrainstem

Hai unha serie de implementacións de EJS:

Licenza

Licenza baixo a licenza Apache, versión 2.0 ( http://www.apache.org/licenses/LICENSE-2.0 )


Modelos de JavaScript incorporados EJS copyright 2112 mde@fleegix.org .