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

Webpack Dev Server代理请求遇ECONNRESET错误,页面持续刷新如何解决?

解决Webpack Dev Server代理导致页面持续刷新与ECONNRESET错误问题

问题现象

本地使用Webpack Dev Server运行React应用,配置了将所有UI请求代理至NodeJS服务器后,Chrome中打开应用页面会持续刷新;日志中频繁出现以下错误:

[webpack-dev-server] [HPM] Error occurred while proxying request localhost:3000 to http://[::1]:8081/ [ECONNRESET]

相关配置

{
  mode: 'development',
  devtool: 'source-map',
  resolve: {
    alias: {
      path: require.resolve('path-browserify'),
      react: require.resolve('react'),
      'react-dom': require.resolve('react-dom'),
      'react-router-dom': require.resolve('react-router-dom'),
      'spectra-ui-commons$': require.resolve('spectra-ui-commons')
    }
  },
  entry: {
    'app-shell': APP_PATH
  },
  output: {
    path: BUILD_PATH,
    filename: isDev ? '[name].js' : '[name].[hash].js',
    assetModuleFilename: 'assets/[name].[ext]'
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /(node_modules|bower_components)/,
        loader: 'babel-loader'
      },
      {
        test: /\.(ts|tsx)$/,
        include: `${APP_PATH}/apps`,
        exclude: /node_modules/,
        loader: 'ts-loader'
      },
      {
        test: /\.(eot|ttf|woff|woff2)$/,
        type: 'asset/resource'
      },
      {
        test: /\.svg$/,
        use: 'svg-sprite-loader'
      },
      {
        test: /\.(sa|sc|c)ss$/,
        use: [
          MiniCssExtractPlugin.loader,
          'css-loader',
          'postcss-loader',
          'sass-loader'
        ]
      }
    ]
  },
  devServer: {
    static: {
      directory: BUILD_PATH,
      staticOptions: {},
      watch: true,
      publicPath: '/build/app/'
    },
    devMiddleware: {
      writeToDisk: true
    },
    compress: true,
    open: true,
    hot: true,
    port: 3000,
    allowedHosts: 'all',
    proxy: {
      '/': 'http://[::1]:8081'
    }
  },
  plugins: [
    new ExternalTemplateRemotesPlugin(),
    new MiniCssExtractPlugin({
      filename: isDev ? '[name].css' : '[name].[hash].css',
      chunkFilename: isDev ? '[id].css' : '[id].[hash].css'
    }),
    new webpack.DefinePlugin({
      'process.env.env': JSON.stringify(process.env.env || 'development'),
      'env.backendHost': JSON.stringify('http://localhost:8081')
    })
  ]
};

解决方案

1. 缩小代理范围(优先推荐)

不要将根路径/全部代理,仅针对后端API的前缀路径设置代理。比如后端接口都以/api开头,修改devServer.proxy配置:

proxy: {
  '/api': 'http://localhost:8081'
}

这样Webpack Dev Server自身的静态资源、热更新(HMR)请求会由自己处理,不会被错误转发到后端服务器。

2. 替换IPv6地址为IPv4

当前代理目标使用了IPv6本地回环地址[::1],部分场景下后端服务器可能仅监听IPv4的localhost。将代理地址替换为localhost或127.0.0.1:

proxy: {
  '/': 'http://localhost:8081'
}

(如果必须保留根路径代理,优先尝试此调整,同时确保后端服务器能正确处理所有静态资源请求)

3. 排除Webpack内部请求

若必须保留根路径代理,通过bypass函数排除Webpack Dev Server的内部请求(如热更新、静态资源):

proxy: {
  '/': {
    target: 'http://localhost:8081',
    bypass: function(req, res, proxyOptions) {
      // 排除热更新和静态资源路径,由dev server自行处理
      if (req.path.startsWith('/sockjs-node') || req.path.startsWith('/build/app')) {
        return req.path;
      }
    }
  }
}

4. 检查后端服务器状态

确认NodeJS服务器确实在8081端口正常运行,且无端口占用、防火墙拦截等问题,直接访问http://localhost:8081验证服务可用性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:31:19