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

HTML文件中EJS模板include相对路径引用及__dirname未定义报错求助

EJS include相对路径配置解决方案

错误原因

__dirname是Node.js的全局变量,默认不会注入到EJS模板的运行上下文中,所以直接在模板中调用会抛出未定义错误。

解决方案

方案1:直接使用相对当前模板的路径(最便捷)

根据你给出的目录结构,index.ejs存放在views根目录下,partials文件夹是views的同级子目录,直接用./代表当前index.ejs所在目录即可,修改后的模板代码如下:

<!DOCTYPE html>
<html lang="en" dir="ltr">

  <!-- THIS SECTION IS FOR <head> TAG THAT WILL BE STORED INSIDE "so_head-tag.ejs" -->
  <%- include('./partials/so_head-tag.ejs') %>

<body>

  <!-- THIS SECTION IS FOR NAVIGATION BAR THAT WILL BE STORED INSIDE "so_header.ejs" -->
  <%- include('./partials/so_header.ejs') %>

  <div class="filler">

  </div>

  <!-- THIS SECTION IS FOR FOOTER BAR THAT WILL BE STORED INSIDE "so_footer.ejs" -->
  <%- include('./partials/so_footer.ejs') %>

  <!-- THIS SECTION IS FOR JAVASCRIPT FILES THAT WILL BE STORED INSIDE "so_javacript.ejs" -->
  <%- include('./partials/so_javacript.ejs') %>

</body>

</html>

只要你views目录下的文件结构保持不变,迁移到任意服务器都不需要修改路径。

方案2:全局配置模板根目录(适合多嵌套模板的项目)

如果你用的是Express框架,可以在项目启动配置中指定模板根目录,后续所有include路径都可以直接从根目录开始计算,不需要写相对层级。
配置代码:

const path = require('path');
const express = require('express');
const app = express();

// 配置ejs模板引擎和根目录
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));

配置完成后,模板中的include可以直接简化为:

<%- include('partials/so_head-tag.ejs') %>

方案3:手动注入__dirname变量(不推荐)

如果确实需要在模板中使用__dirname,可以在渲染页面时把该变量作为参数传入模板:

app.get('/', (req, res) => {
  res.render('index', { __dirname: __dirname });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 12:36:04