"E" 代表 "effective",即【高效】EJS 是一套简单的模板语言
利用普通的 JavaScript 代码生成 HTML 页面,EJS 没有如何组织内容的教条
也没有再造一套迭代和控制流语法;有的只是普通的 JavaScript 代码而已
所有模板语言都要成长为图灵完备的语言,也就是说要增加一个中间层
无需浪费时间钻研那些所谓“优雅”的神秘语法,也不用研究数据究竟如何能够被正确处理
EJS 支持直接在标签内书写简单、直白的 JavaScript 代码
只需让 JavaScript 输出你所需要的 HTML ,完成工作很轻松
V8 以及类似 JavaScript 引擎的速度有多快
EJS 能够缓存 JS 函数的中间代码,从而提升执行速度
调试 EJS 错误(error)很容易:所有错误都是普通的 JavaScript 异常,并且还能输出异常发生的位置
$ npm install ejs
将模板字符串和一些数据作为参数传递给 EJS,Duang,HTML 出来
var ejs = require('ejs'),
people = ['geddy', 'neil', 'alex'],
html = ejs.render('<%= people.join(", "); %>', {people: people});
从这里下载 最新的浏览器版本,然后引入页面即可
<% %>
用于控制流<%= %>
用于转义的输出<%- %>
用于非转义的输出-%>
结束标签用于换行移除模式<%_ _%>
的控制流使用空白字符移除模式<% if (user) { %>
<%= user.name %>
<% } %>
var template = ejs.compile(str, options);
template(data);
// => 渲染 HTML 字符串
ejs.render(str, data, options);
// => 渲染 HTML 字符串
你也可以使用快捷方式 ejs.render(dataAndOptions);
,其中你可以通过一个对象来传递任何东西。在这种情况下,你需要以一个装有所有需要传递对象的本地变量结束。
cache
编译过的函数会被缓存,需要filename
filename
被cache
用做缓存的键,用于包含context
函数执行的上下文compileDebug
如果为false
,不会编译调试用的工具client
返回独立的编译后的函数delimiter
开启或者闭合尖括号所用的字符debug
输出生成的函数体_with
是否使用 with() {}
结构。如果为 false
则局部数据会储存在 locals
对象中。rmWhitespace
移除所有可以安全移除的空白字符,包含前导和尾后的空白字符。同时会为所有scriptlet标签开启-%>
换行截断的更加安全的模式。(它不会在一行之中去除标签的换行)。<%
'Scriptlet' 标签, 用于控制流,没有输出<%=
向模板输出值(带有转义)<%-
向模板输出没有转义的值<%#
注释标签,不执行,也没有输出<%%
输出字面的 '<%'%>
普通的结束标签-%>
Trim-mode ('newline slurp') 标签, 移除随后的换行符包含要么是绝对路径,或者如果不是的话,被视为相对于调用include
的模板的路径(需要filename
选项)。 例如,你在./views/users.ejs
中包含./views/user/show.ejs
,你应该使用<%- include('user/show') %>
。
你可能会用到原始输出标签(<%-
)避免二次转义HTML输出。
<% users.forEach(function(user){ %>
<%- include('user/show', {user: user}) %>
<% }); %>
包含的内容在运行时插入, 所以你可以在include
调用中使用变量作为路径(例如<%- include(somePath) %>
)。在你顶级数据对象中的变量都可以用于所有的包含,而局部变量需要传递进来。
注意:仍然支持包含预处理指令(<% include user/show %>
)。
自定义分隔符可以以模板为单位应用,或者全局:
var 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'
EJS 自带了一个基本的运行时缓存,用于缓存渲染模板的中介JavaScript函数。使用 Node 的 lru-cache
库来添加LRU缓存十分简单:
var ejs = require('ejs')
, LRU = require('lru-cache');
ejs.cache = LRU(100); // LRU cache with 100-item limit
如果你想清除ejs的缓存,调用ejs.clearCache
。如果你需要以一个不同的限额来使用LRU,只需要将ejs.cache
重新设置为一个LRU的新实例。
EJS 不会特别地支持区块,但是可以采用包含头部和尾部的方法来实现局部,像这样:
<%- include('header') -%>
Title
My page
<%- include('footer') -%>