EJS 中文文檔
嵌入式 JavaScript 模板
安裝
$ npm install ejs
特性
-
<% %> 用于控制流
-
<%= %> 用于轉義的輸出
-
<%- %> 用于非轉義的輸出
-
-%> 結束標簽用于換行移除模式
-
帶有 <%_ _%> 的控制流使用空白字符移除模式
-
自定義分隔符 (例如,使用 '<? ?>' 代替 '<% %>')
-
包含
-
客戶端支持
-
中介JavaScript的靜態緩存
-
模板的靜態緩存
-
與 Express 視圖系統兼容
示例
<% if (user) { %> <h2><%= user.name %></h2> <% } %>
用法
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輸出。
<ul> <% users.forEach(function(user){ %> <%- include('user/show', {user: user}) %> <% }); %> </ul>
包含的內容在運行時插入, 所以你可以在 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') -%> <h1> Title </h1> <p> My page </p> <%- include('footer') -%>
客戶端支持
訪問 最新發布 ,下載
./ejs.js 或者 ./ejs.min.js 。
選擇其一包含到你的頁面中,并且使用 ejs.render(str) 。
相關項目
EJS 有許多實現:
-
TJ 的實現,這個庫的 v1 版本: https://github.com/tj/ejs
-
Jupiter Consulting 的 EJS: http://www.embeddedjs.com/
-
Google Code 上的 EJS 嵌入式 JavaScript 框架: https://code.google.com/p/embeddedjavascript/
-
Sam Stephenson 的 Ruby 實現: https://rubygems.org/gems/ejs
-
Erubis,ERB 實現,也可以運行JavaScript: http://www.kuwata-lab.com/erubis/users-guide.04.html#lang-javascript