You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EJS带括号include语法失效 无法动态引入及传参问题求助

EJS带括号include语法报错解决方案

问题根源

报错是ejs-locals包和EJS 3.x版本的语法冲突导致的:

  • ejs-locals早已停止维护,仅适配EJS 2.x的语法规范,它重写了EJS的include解析逻辑,无法识别EJS 3.x新增的函数式带括号include语法,会错误把括号内的所有内容都识别为模板文件名的一部分,所以会出现报错中把参数部分也拼入文件路径查找的异常情况。

推荐解决方案

直接移除ejs-locals依赖即可,EJS 3.x本身已经原生支持动态引入模板、传递局部变量的能力,不需要额外引入该扩展包:

  1. 卸载ejs-locals:
    npm uninstall ejs-locals
  2. 修改Express的模板引擎配置,删除原本注册ejs-locals的代码,改为使用EJS原生渲染:
// 删除该行代码
// app.engine('ejs', require('ejs-locals'))
// 保留以下原生配置即可
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'))

修改完成后,两种带括号的include写法都可以正常运行:

  • 动态引入模板:<%- include('../components/' + variable) %>
  • 传递自定义局部变量:<%- include('../components/card.ejs', {user: variable}) %>

备选兼容方案

如果必须保留ejs-locals依赖,只能降级使用EJS 2.x的无括号include语法,局部变量需要在渲染父模板时挂载到全局locals对象中,子模板直接读取即可,但该方案不支持动态拼接模板路径,无法满足动态引入的需求。

内容的提问来源于stack exchange,提问作者Yossi Shemesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:51:01