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

使用Webpack HtmlWebpackPlugin加载模板时能否传递参数?

HtmlWebpackPlugin 模板传参实现方案

HtmlWebpackPlugin 完全支持向模板传递参数,结合模板引擎(默认是 EJS)就能实现你要的动态模板效果,不用额外引入 PHP 或复杂的 JS 逻辑。下面给你两种实用的实现方式:

方法一:利用 HtmlWebpackPlugin 配置 + EJS include 传参

这是最简洁的方案,直接用插件自带的能力:

1. 在 Webpack 配置中给每个页面传参

修改 webpack.config.js,给每个 HtmlWebpackPlugin 实例添加 templateParameters,传入当前页面的标识:

const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
  // ...其他配置
  plugins: [
    new HtmlWebpackPlugin({
      filename: 'index.html',
      template: './src/pages/index.html',
      // 给首页传入活跃页面标识
      templateParameters: {
        activePage: 'home'
      }
    }),
    new HtmlWebpackPlugin({
      filename: 'about.html',
      template: './src/pages/about.html',
      // 给关于页传入活跃页面标识
      templateParameters: {
        activePage: 'about'
      }
    })
  ]
};

2. 改造菜单模板,支持变量判断

修改你的顶部菜单模板(比如 src/partials/menu.html),用 EJS 语法根据传入的变量设置活跃状态:

<nav class="top-menu">
  <ul>
    <li class="<%= activePage === 'home' ? 'active' : '' %>">
      <a href="/index.html">首页</a>
    </li>
    <li class="<%= activePage === 'about' ? 'active' : '' %>">
      <a href="/about.html">关于我们</a>
    </li>
    <li class="<%= activePage === 'contact' ? 'active' : '' %>">
      <a href="/contact.html">联系我们</a>
    </li>
  </ul>
</nav>

3. 在主页面模板中加载菜单并传参

在你的页面模板(比如 src/pages/index.html)中,用 EJS 的 include 语法加载菜单模板,并把配置里的参数传进去:

<!-- 加载顶部菜单模板,传入当前活跃页面参数 -->
<%- include('../../partials/menu.html', { activePage: activePage }) %>

<!-- 页面其他内容 -->
<h1>首页内容</h1>

这里用 <%- 而不是 <%=,是为了直接输出 HTML 内容,避免字符转义。

方法二:结合 raw-loader + Lodash 模板编译传参

如果你习惯用 require 加载模板的方式,可以用这个方案:

1. 安装依赖

先安装 Lodash 和 raw-loader:

npm install lodash raw-loader --save-dev

2. 配置 Webpack 启用 raw-loader

在 webpack.config.js 中添加规则,用 raw-loader 加载 HTML 模板内容:

module.exports = {
  // ...其他配置
  module: {
    rules: [
      {
        test: /\.html$/,
        use: 'raw-loader',
        exclude: /node_modules/
      }
    ]
  }
};

3. 在主页面中编译模板并传参

在页面模板中,用 Lodash 的 template 方法编译加载的模板,同时传入参数:

<% 
// 加载菜单模板内容
const menuTemplate = require('../../partials/menu.html');
// 编译模板
const renderMenu = _.template(menuTemplate);
%>

<!-- 渲染菜单,传入当前活跃页面参数 -->
<%- renderMenu({ activePage: activePage }) %>

这里的 activePage 同样来自 HtmlWebpackPlugin 配置的 templateParameters。

两种方案都能实现你的需求,推荐第一种,因为更贴合 HtmlWebpackPlugin 的原生能力,配置也更简单。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 18:45:58