在 webpack 中使用 html 部分

问题描述 投票:0回答:1

我对 JS 和 webpack 很陌生,我正在尝试在我的项目中对页眉和页脚使用部分内容,以免到处重复它们。

我的第一个方法是安装

html-loader
并在我的index.html中使用:

<%= require('html-loader!./assets/html/header.html') %>

只有当我不在 webpack 配置中为 html 文件添加任何规则时(我想如果我这样做,它会干扰

HtmlWebpackPlugin
),它才有效,但是,我的页面正在呈现:

[object Module]

我在网上没有找到任何好的解释(与html文件案例相关)。

我有一个好的方法吗,或者还有其他更简单的方法吗?我将在任何地方都包含这些部分,但我不排除为我想在特定页面中使用的内容创建部分。

webpack html-webpack-plugin webpack-html-loader
1个回答
0
投票

更简单的方法是使用 html-bundler-webpack-plugin。该插件支持许多“开箱即用”的模板引擎(Eta、EJS、Handlebars、Nunjucks、LiquidJS)。默认模板引擎是最快的 Eta(类似 EJS)。

简单的用法,干净的语法,例如,./src/views/index.html

<html>
  <head>
    <!-- specify a source style file, relative to html file -->
    <link href="../scss/styles.scss" rel="stylesheet" />
    <!-- specify a source script file, relative to html file -->
    <script src="../js/main.js" defer="defer"></script>
  </head>
  <body>
    <!-- specify a source partial file, relative to project path -->
    <%~ include('/src/views/header.html') %>
    <h1>Hello World!</h1>
    <!-- specify a source image file, relative to html file -->
    <img src="../images/picture.png" />
    <!-- specify a source partial file, relative to project path -->
    <%~ include('/src/views/footer.html') %>
  </body>
</html>

最小的 Webpack 配置:

const HtmlBundlerPlugin = require('html-bundler-webpack-plugin');

module.exports = {
  plugins: [
    new HtmlBundlerPlugin({
      entry: {
        // define templates here
        index: './src/views/index.html', // => dist/index.html
      },
    }),
  ],
  module: {
    rules: [
      {
        test: /\.(css|sass|scss)$/,
        use: ['css-loader', 'sass-loader'],
      },
      {
        test: /\.(ico|png|jp?g|webp|svg)$/,
        type: 'asset/resource',
        generator: {
          filename: 'img/[name].[hash:8][ext]',
        },
      },
    ],
  },
};

注意 入口点是一个 HTML 文件。所有源脚本和样式文件都应直接在 HTML 中指定。 该插件解析 HTML 模板中的所有源文件,并用生成的 HTML 中的输出文件名替换引用。

无需额外的插件和加载程序。

© www.soinside.com 2019 - 2024. All rights reserved.