EJS模板引擎

EJS 是一个开源的 JavaScript 模板引擎库。EJS 全称通常理解为 Embedded JavaScript templates,意思是"嵌入式 JavaScript 模板"。它允许你在文本、HTML、Markdown 等模板文件里写 JavaScript 表达式或逻辑,然后把变量渲染成最终内容。

例如根据环境配置把 SKILL.md 这类 Markdown 模板渲染成最终文档。

EJS 的核心用法:

  1. 准备一个模板字符串或模板文件
  2. 准备一份数据对象
  3. 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 %> 你好,张三你好,&lt;b&gt;张三&lt;/b&gt;
<%- 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 %> <%_ }) _%> 张三 李四
相关推荐
weixin_431600441 天前
前端数据埋点(1):一次点击如何变成一条埋点
前端·js·数据埋点
記億揺晃着的那天2 天前
NAS 内网域名访问为什么需要浏览器授权
网络·nginx·js·nas
—Qeyser2 天前
html 可视化海报模板编辑器
css·html·js
我命由我123453 天前
CesiumJS 笔记 - 获取容器中心点、Cartesian3 clone 方法、修改 Cartesian3 对象的高度
前端·javascript·css·前端框架·html·html5·js
其美杰布-富贵-李9 天前
第 8 篇:Three.js 材质系统
javascript·three.js·js
shawxlee25 天前
vue3在public下封装config.js自定义配置动态数据,可在打包后直接修改,方便后端部署及后续维护
前端·javascript·经验分享·vue·团队开发·js·项目优化
陆康永1 个月前
JavaScript 数组填充:Array.from 与 Array.fill 用法详解及核心区别
js·array
熊猫钓鱼>_>1 个月前
ArkTS 方舟编程语言 · 原创快速入门教程
运维·架构·ts·harmonyos·arkts·鸿蒙·js
sugar__salt1 个月前
Document 切割:RAG 知识库数据预处理实战
javascript·langchain·embedding·js·rag·cheerio