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

Webpack编译成功但http://localhost:8080返回404错误求助

解决webpack-dev-server访问404问题

问题场景

已安装webpack、webpack-cli、css-loader、node-sass、sass、sass-loader、style-loader、mini-css-extract-plugin依赖,执行npm start启动webpack-dev-server后,访问http://localhost:8080出现Cannot GET /的404错误。直接打开本地index.html文件可正常显示样式,但无法通过本地服务访问。

问题原因

  1. webpack-dev-server默认将打包资源存放在内存中,不会写入dist目录,当前配置未指定服务器的静态文件目录,导致服务器根目录找不到可访问的入口文件。
  2. index.html中引用的资源路径是基于本地文件系统的相对路径,在服务器环境下路径无效。
  3. 开发环境使用MiniCssExtractPlugin生成独立CSS文件,但该插件在dev-server模式下不会将文件输出到磁盘,导致页面无法加载到样式。

解决方案

1. 调整webpack.config.js配置

添加devServer配置,指定静态文件目录,并优化开发环境的样式处理方式:

const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = {
  mode: "development",
  entry: './src/index.js',
  output: {
      path: path.resolve(__dirname, 'dist'),
      filename: 'js/main.js',
      publicPath: '/' // 确保资源路径基于服务器根目录
  },
  module: {
    rules: [
      {
        test: /\.s[ac]ss$/i,
        use: [
          // 开发环境用style-loader,直接将样式注入页面,支持热更新
          'style-loader',
          "css-loader",
          "sass-loader",
        ],
      },
    ],
  },
  plugins: [
      // 开发环境注释掉MiniCssExtractPlugin,生产环境再启用
      // new MiniCssExtractPlugin({
      //     filename: 'css/main.css',
      // })
  ],
  watch: true,
  devServer: {
    static: {
      directory: path.join(__dirname, './'), // 指定静态文件目录为项目根目录
    },
    compress: true,
    port: 8080,
    open: true, // 启动后自动打开浏览器
    historyApiFallback: true // 确保根路径返回index.html
  }
};

2. 修改index.html资源引用路径

调整为服务器环境下的有效路径,同时移除对未生成的dist目录CSS文件的引用:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Dellmayer</title>
    <!-- 开发环境无需手动引入CSS,style-loader已自动注入 -->
  </head>
  <body class="page__body">
    <header class="header">
      <nav class="menu">
        <ul class="menu__list">
          <li class="menu__item">HOME</li>
          <li class="menu__item">HISTORY</li>
          <li class="menu__item">PRODUCT</li>
          <li class="menu__item">SPECIFICATION</li>
          <li class="menu__item">IN THE BOX</li>
          <li class="menu__item">CONTACT</li>
        </ul>
      </nav>
    </header>
    <!-- 引用内存中的打包JS文件 -->
    <script type="text/javascript" src="/js/main.js"></script>
  </body>
</html>

3. 优化package.json启动命令(可选)

webpack 5推荐使用webpack serve替代webpack-dev-server,更新scripts:

{
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "webpack serve"
  }
}

验证

执行npm start启动服务,浏览器会自动打开http://localhost:8080,此时页面应正常加载,样式也能正确显示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 09:05:55