EJS


Начало работы

Hello world

install

npm install ejs

hello.ejs

``html <% if (user.email) { %>

CLI

``Оболочка $ ejs hello.ejs -o hello.html




### Рендеринг с данными

let ejs = require(’ejs’);

let people = [‘geddy’, ’neil’, ‘alex’]; let tpl = ‘<%= people.join(", “); %>’;

let html = ejs.render(tpl, {people: people}); console.log(html);

Передаем EJS строку шаблона и некоторые данные.



### Поддержка браузеров
Использование ejs в теге script.



### Переменные
| | |
|--------------|----------------------------------|
| `<%= var %>` | Выводит значение переменной |
| `<%- var %>` | Выводит без экранирования HTML |


### CLI

Рендеринг и указание выходного файла.
``Оболочка
$ ejs hello.ejs -o hello.html

Передать ему файл шаблона и файл данных ``оболочка $ ejs hello.ejs -f data.json -o hello.html




### Комментарии
``html
<%# Эта строка будет обозначать комментарий %>

``html <%# Это многострочный комментарий EJS. Он может занимать несколько строк, но не будет отображаться в конечном HTML-выводе. %>





### Метод

let ejs = require(’ejs’); let template = ejs.compile(str, options);

template(data); // => Рендеринг HTML-строки

ejs.render(str, data, options); // => Рендеринг HTML-строки

ejs.renderFile(filename, data, options, function(err, str){ // str => Рендеринг HTML-строки });




### Включая файлы

``html
<%- include('partials/navbar.ejs') %>

Включение шаблона с данными:

``html <% include(‘header’, { title: ‘Моя страница’ }) %>

------------

``html
<ul>
  <% users.forEach(function(user){ %>
    <%- include('item', {user: user}); %>
  <% }); %>
</ul>

Для включения шаблона требуется опция имени файла, пути являются относительными

Docs

Условные обозначения

``html <% if (userLoggedIn) { %>

Использование циклов

``html <% if (userLoggedIn) { %>

Пользовательские разделители

let ejs = require('ejs'),
    users = ['geddy', 'neil', 'alex'];

// Только один шаблон
ejs.render('<?= users.join(" | "); ?>',
    {users: users},
    {delimiter: '?'});
// => 'geddy | neil | alex'

// Или глобально
ejs.delimiter = '$';
ejs.render('<$= users.join(" | "); $>',
    {users: users});
// => 'geddy | neil | alex'

Кэширование

let ejs = require('ejs'),
LRU = require('lru-cache');

// LRU-кэш с ограничением в 100 элементов
ejs.cache = LRU(100);

Пользовательский загрузчик файлов

let ejs = require('ejs');
let myFileLoader = function (filePath) {
  return 'myFileLoader: ' + fs.readFileSync(filePath);
};

ejs.fileLoader = myFileLoader;

Макеты

<%- include('header'); -%>
<h1>
  Заголовок
</h1>
<p>
  Моя страница
</p>
<%- include('footer'); -%>

Поддержка на стороне клиента

Пример

<div id="output"></div>
<script src="ejs.min.js"></script>
<script>
  let people = ['geddy', 'neil', 'alex'],
      html = ejs.render('<%= people.join(", "); %>', {people: people});
  // С помощью jQuery:
  $('#output').html(html);
  // Ванильный JS:
  document.getElementById('output').innerHTML = html;
</script>

Оговорки

let str = "Hello <%= include('file', {person: 'John'}); %>",
      fn = ejs.compile(str, {client: true});

fn(data, null, function(path, d){ // обратный вызов включения
  // path -> 'file'
  // d -> {person: 'John'}
  // поместите сюда свой код
  // Возвращает содержимое файла в виде строки
}); // возвращает отрендеренную строку

Опции

Список опций

Опция Описание
cache Скомпилированные функции кэшируются, требуется имя файла
filename Используется кэшем для ключа кэша, а также для include
root Устанавливает корень проекта для include с абсолютным путем (например, /file.ejs). Может быть массивом, чтобы попытаться разрешить включение из нескольких каталогов.
views
context
compileDebug
client Возвращает автономную скомпилированную функцию
delimiter
openDelimiter Символ, используемый для открывающего разделителя, по умолчанию ‘<’
closeDelimiter Символ, используемый для закрывающего разделителя, по умолчанию ‘>’
debug Вывод сгенерированного тела функции
strict Если установлено значение true, то генерируемая функция работает в строгом режиме
_with Использовать или нет конструкцию with() {}. Если false, то локали будут храниться в объекте locals. (Подразумевается --strict)
localsName Имя для объекта, хранящего локальные переменные, если не используется конструкция with По умолчанию - locals
rmWhitespace Удалить все безопасные для удаления пробельные символы, включая ведущие и завершающие пробельные символы. Это также позволяет использовать более безопасную версию -%> удаления строк для всех тегов скриптов (не удаляет новые строки с тегами в середине строки).
escape Функция экранирования, используемая с конструкцией <%=. Используется при рендеринге и .toString()ed при генерации клиентских функций. (По умолчанию экранирует XML).
outputFunctionName
async

Теги

Список тегов

Tag Description
<% Тег ‘Scriptlet’, для потока управления, без вывода
<%_ ‘Whitespace Slurping’ Scriptlet тег, удаляет все пробельные символы перед ним
<%= Вывод значения в шаблон (с HTML-экранированием)
<%- Выводит в шаблон неэкранированное значение
<%# Тег комментария, не выполняется, не выводится
<%% Выводит литерал ‘<%’
%> Обычный завершающий тег
-%> Тег Trim-mode (’newline slurp’), обрезает следующую новую строку
_%> Завершающий тег ‘Whitespace Slurping’, удаляет все пробельные символы после него

Cli

Список Cli

Опция | Опция | Описание | |—————-|————————————————————————————————————————-| | cache | Скомпилированные функции кэшируются, требуется имя файла | | -o / –output-file FILE | Записывать отрендеренный вывод в FILE, а не в stdout. | | -f / –data-file FILE | Должен быть в формате JSON. В качестве данных для рендеринга использовать разобранные входные данные из FILE. | | -i / –data-input STRING | Должен быть в формате JSON и в кодировке URI. В качестве данных для рендеринга использовать разобранные данные из STRING. | | | -m / –delimiter CHARACTER | Использовать CHARACTER с угловыми скобками для открытия/закрытия (по умолчанию %). | | | -p / –open-delimiter CHARACTER | Использовать CHARACTER вместо левой угловой скобки для открытия. | | | -c / –close-delimiter CHARACTER| Используйте CHARACTER вместо правой угловой скобки для закрытия. | | -s / –strict | Если установлено значение true, то генерируемая функция работает в строгом режиме | | | -n / –no-with | Использовать объект ’locals’ для vars вместо использования with (подразумевает –strict). | | -l / –locals-name | Имя объекта, хранящего локальные переменные, если не используется with. | | | -w / –rm-whitespace | Удалять все безопасные для удаления пробельные символы, включая ведущие и завершающие пробельные символы. | | | -d / –debug | Вывод сгенерированного тела функции | | | -h / –help | Вывести справочное сообщение. | | | -V/v / –version | Вывести версию EJS. |

Примеры использования :

$ ejs -p [ -c ] ./template_file.ejs -o ./output.html
$ ejs ./test/fixtures/user.ejs name=Lerxst
$ ejs -n -l _ ./some_template.ejs -f ./data_file.json