Теги
<%-
и <%
имеют различное назначение, первый - просто для неэкранированного вывода:
const template = '<%- user %>';
ejs.render(template, { user: 'Alice' }); // renders "Alice"
Но, скажем, пользователей много, в этом случае может потребоваться использоватьнекоторая структура управления потоком для перебора пользователей, это когда используется <%
:
const template2 = '<% users.map(user => { %> <%- user -%> <% }) %>';
ejs.render(template, { users: ['Alice', 'Bob'] }); // renders "Alice Bob"
Как вы можете убедиться, в этих примерах теги <%-
и <%
имеют различное поведение и не являются взаимозаменяемыми,
Случай, который вы описали с помощью include
, довольно особенный.На мой взгляд, ожидаемое поведение будет не выводить partials/header
(с <%
), поскольку это простой шаблон (не управление потоком).
Вот как это работает с современными include
синтаксис, т.е. если вы попытаетесь include
заголовок, используя:
<% include("partials/header") %>
вместо
<% include partials/header %>
, вы увидите, что нет вывода.
Что касается устаревшего синтаксиса include
, то, по-видимому, ejs
обрабатывает его одинаково внутри тегов <%
и <%-
.Если вы хотите продолжить изучение этого вопроса, может быть полезен просмотр исходного кода библиотеки: https://github.com/mde/ejs/blob/master/lib/ejs.js#L713
Или вы можете просто предпочесть новый синтаксис include
, который, по-видимому, обеспечивает более согласованное поведение.