如何解决 HtmlWebpackPlugin 导致打包后 html 中 css 路径不正确的情况?

如何解决 HtmlWebpackPlugin 导致打包后 html 中 css 路径不正确的情况?

在前端开发中,我们经常会使用 webpack 来打包项目。webpack 提供了很多插件来优化我们的打包流程,其中 HtmlWebpackPlugin 就是常用的一个插件,它可以将我们的打包结果输出为一个 html 文件,并自动添加引用我们打包后的 js 文件。

然而,在使用 HtmlWebpackPlugin 的过程中,我们有可能会遇到一个问题——打包完后生成的 html 文件中引用的 CSS 文件路径不正确。这是因为 HtmlWebpackPlugin 默认使用了相对路径,但如果我们的 css 文件不是和 html 文件在同一个目录下,那么就会导致路径不正确。

那么,如何解决这个问题呢?下面就来分享一下解决方案。

解决方案

在 HtmlWebpackPlugin 中,其实有一个非常实用的选项——publicPath,它可以帮助我们设置打包后 html 中引用资源的根路径。我们可以将其设置为一个绝对路径,这样就可以确保路径的正确性。

具体的操作步骤如下:

  1. 在 webpack 的配置文件中加入 publicPath 选项,例如:
module.exports = {
  // ...
  output: {
    // ...
    publicPath: '/',
  },
  // ...
}

这里我们将 publicPath 设置为根路径 /,也可以根据实际情况设置为其他路径。

  1. 在 HtmlWebpackPlugin 配置中加入 publicPath 选项,例如:
plugins: [
  new HtmlWebpackPlugin({
    // ...
    publicPath: '/',
  }),
  // ...
]

这里的 publicPath 选项和上一步中的作用是一样的,都是为了设置根路径。

通过以上两个步骤,我们就可以解决 HtmlWebpackPlugin 导致打包后 html 中 css 路径不正确的情况了。

示例代码

下面是一个完整的示例代码:

webpack.config.js

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

module.exports = {
  entry: './src/index.js',
  output: {
    filename: '[name].[hash:8].js',
    path: path.resolve(__dirname, 'dist'),
    publicPath: '/',
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './src/index.html',
      title: 'My App',
      publicPath: '/',
    }),
  ],
  module: {
    rules: [
      {
        test: /\.css$/,
        use: ['style-loader', 'css-loader'],
      },
    ],
  },
};

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title><%= htmlWebpackPlugin.options.title %></title>
    <link rel="stylesheet" href="/static/css/main.css" />
  </head>
  <body>
    <div id="root"></div>
    <script src="/main.a5b5def3.js"></script>
  </body>
</html>

注意,这里的 CSS 和 JS 文件都是放在 dist/static 目录中的。

总结

通过以上的步骤,我们就可以解决 HtmlWebpackPlugin 导致打包后 html 中 css 路径不正确的情况了。同时,我们也了解了如何使用 publicPath 选项来设置打包后 html 中引用资源的根路径,这对我们在前端开发中处理路径问题非常有帮助。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/659f85cfadd4f0e0ff81b4b6


纠错反馈