EJS 是一个开源的 JavaScript 模板引擎库。EJS 全称通常理解为 Embedded JavaScript templates,意思是"嵌入式 JavaScript 模板"。它允许你在文本、HTML、Markdown 等模板文件里写 JavaScript 表达式或逻辑,然后把变量渲染成最终内容。
例如根据环境配置把 SKILL.md 这类 Markdown 模板渲染成最终文档。
EJS 的核心用法:
- 准备一个模板字符串或模板文件
- 准备一份数据对象
- 用
ejs.render()或ejs.renderFile()渲染
下面给你一个最简单 demo。
1. 安装 EJS
bash
npm install ejs
2. 最简单的字符串模板 demo
新建 demo.js:
js
const ejs = require('ejs');
const template = `
<h1>Hello, <%= name %></h1>
<ul>
<% users.forEach(user => { %>
<li><%= user %></li>
<% }) %>
</ul>
`;
const data = {
name: 'DataBI',
users: ['张三', '李四', '王五'],
};
const html = ejs.render(template, data);
console.log(html);
运行:
bash
node demo.js
输出类似:
html
<h1>Hello, DataBI</h1>
<ul>
<li>张三</li>
<li>李四</li>
<li>王五</li>
</ul>
3. 使用模板文件
新建 template.ejs
ejs
<h1><%= title %></h1>
<% if (showList) { %>
<ul>
<% items.forEach(item => { %>
<li><%= item.name %>:<%= item.value %></li>
<% }) %>
</ul>
<% } else { %>
<p>暂无数据</p>
<% } %>
新建 render.js
js
const path = require('path');
const ejs = require('ejs');
const data = {
title: '销售数据',
showList: true,
items: [
{ name: '订单数', value: 1200 },
{ name: '销售额', value: '¥89,000' },
{ name: '转化率', value: '12.5%' },
],
};
ejs.renderFile(path.join(__dirname, 'template.ejs'), data, (err, result) => {
if (err) {
console.error('渲染失败:', err);
return;
}
console.log(result);
});
运行:
bash
node render.js
输出:
html
<h1>销售数据</h1>
<ul>
<li>订单数:1200</li>
<li>销售额:¥89,000</li>
<li>转化率:12.5%</li>
</ul>
简单记忆:
| 语法 | 作用 | 输入数据 | 模板示例 | 输出结果 |
|---|---|---|---|---|
<%= value %> |
输出变量,并自动转义 HTML | { name: '张三' } 或 { name: '<b>张三</b>' } |
你好,<%= name %> |
你好,张三 或 你好,<b>张三</b> |
<%- html %> |
原样输出,不转义 HTML | { name: '<b>张三</b>' } |
你好,<%- name %> |
你好,<b>张三</b> |
<% code %> |
执行 JS,不输出代码本身 | { isVip: true } |
<% if (isVip) { %>VIP用户<% } %> |
VIP用户 |
<%# comment %> |
EJS 注释,不输出 | {} |
开始<%# 这里是注释 %>结束 |
开始结束 |
<%_ code _%> |
执行 JS,并尽量去掉前后空白 | { users: ['张三', '李四'] } |
<%_ users.forEach(u => { _%><%= u %> <%_ }) _%> |
张三 李四 |