发布于 2026-01-06 1 阅读
0

webpack 5 - 多页面网站构建教程 动态定义每个页面的入口点 将所有必要的代码注入到 HTML 中 优化 完整的配置和示例应用 链接 还想了解更多?

webpack 5 - 多页面网站构建教程

动态定义每个页面的条目

将所有必要的代码注入到 HTML 中。

优化

完整配置和示例应用程序

链接

还想要更多吗?

你是否曾经想过如何使用 webpack 构建多页面网站?如果是这样——无论是由于维护旧页面,还是由于一些当前的架构决策——专注于单页应用程序 (SPA) 的资料可能会让你产生一些疑问。

动态定义每个页面的条目

在我们的例子中,我们需要为每个页面定义一个条目。假设我们有一个页面列表(存储在一个数组中)pages = ['a', 'b'],那么entry:webpack 配置的相应部分可以如下所示:

  entry: pages.reduce((config, page) => {
    config[page] = `./src/${page}.js`;
    return config;
  }, {}),
Enter fullscreen mode Exit fullscreen mode

只需一点函数式编程,我们就把pages列表转换成了:

{
  a: '.src/a.js',
  b: '.src/b.js'
}
Enter fullscreen mode Exit fullscreen mode

我们可以将其设置为entry。因为这样做,下次我们添加新页面时,就只会向列表中添加一个元素,而无需复制粘贴代码。

将所有必要的代码注入到 HTML 中。

与单页应用 (SPA) 类似,我们希望动态地将导入项注入到 HTML 中。为此,我们使用 ` <script> HtmlWebpackPlugin` 标签。同样,我们希望使用pages数组,这样在添加新页面时可以避免重复编写代码。因此,我们将动态构建 `<script>` 标签plugins:,并预留空间用于添加其他不相关的插件。

  plugins: [].concat(
    pages.map(
      (page) =>
        new HtmlWebpackPlugin({
          inject: true,
          template: `./${page}.html`,
          filename: `${page}.html`,
          chunks: [page],
        })
    ),
    // <- here goes array(s) of other plugins
  ),
Enter fullscreen mode Exit fullscreen mode

优化

为了最大限度地发挥架构优势,我们需要将构建的代码拆分成多个代码块。这样,如果代码块足够大且在多个页面中使用,我们就可以重用其中的部分代码。幸运的是,我们只需添加以下代码即可实现这一点:

  optimization: {
    splitChunks: {
      chunks: "all",
    },
  },
Enter fullscreen mode Exit fullscreen mode

完整配置和示例应用程序

完整的工作配置:

const path = require("path"),
  HtmlWebpackPlugin = require("html-webpack-plugin");

const pages = ["a", "b"];

module.exports = {
  entry: pages.reduce((config, page) => {
    config[page] = `./src/${page}.js`;
    return config;
  }, {}),
  output: {
    filename: "[name].js",
    path: path.resolve(__dirname, "dist"),
  },
  optimization: {
    splitChunks: {
      chunks: "all",
    },
  },
  plugins: [].concat(
    pages.map(
      (page) =>
        new HtmlWebpackPlugin({
          inject: true,
          template: `./${page}.html`,
          filename: `${page}.html`,
          chunks: [page],
        })
    )
  ),
};
Enter fullscreen mode Exit fullscreen mode

要体验这项功能,最简单的方法是查看示例应用程序的仓库:
https://github.com/marcin-wosinek/webpack-multipage-example

链接

还想要更多吗?

您可以在这里看到我对示例的详细讲解:

文章来源:https://dev.to/marcinwosinek/tutorial-for-building-multipage-website-with-webpack-4gdk