Webpack 5 实时重载

Posted

技术标签:

【中文标题】Webpack 5 实时重载【英文标题】:Webpack 5 live reload 【发布时间】:2021-02-05 00:13:00 【问题描述】:

我将 webpack 4 更新到 webpack 5,之后一切正常,除了更新浏览器(实时重新加载),谁能说出原因?这是我的配置。

const path = require('path');
const htmlWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const autoprefixer = require('autoprefixer');

module.exports = (env, argv) => 
  const  mode = 'development'  = argv;
  const isProd = mode === 'production';
  const isDev = mode === 'development';

  const getStyleLoaders = () => 
    return [isProd ? MiniCssExtractPlugin.loader : 'style-loader'];
  ;
  return 
    context: path.resolve(__dirname, 'src'),
    mode: isProd ? 'production' : isDev && 'development',
    entry: './index.js',
    output: 
      path: path.resolve(__dirname, 'dist'),
      filename: isDev ? 'script/script.js' : 'script/bundle-[hash:8].js',
      publicPath: '/',
    ,
    resolve: 
      extensions: ['.js'],
    ,
    devServer: 
      contentBase: path.join(__dirname, 'dist'),
      publicPath: '/',
      open: true,
      watchContentBase: true,
      port: 8080,
    ,
    devtool: isProd ? false : 'source-map',
  ;
;

【问题讨论】:

【参考方案1】:

你需要在你的 Webpack 配置中设置 target: 'web' 并确保像这样运行你的开发服务器:webpack serve --mode development --env development

【讨论】:

感谢法里德。我一直在网上搜索,这是唯一对我有用的解决方案。 关注此问题的根本原因和错误状态:github.com/webpack/webpack-dev-server/issues/2758【参考方案2】:

只有当 webpack 包的目标是 'web' 时,live reload 才会起作用, 所以将这一行添加到 webpack.config 将使其工作:

target: 'web'

不过,在编写本文时,webpack-dev-server@3 中存在一个错误,当目标是包含“web”的数组时,它会阻止实时重新加载: https://github.com/webpack/webpack-dev-server/pull/3271

所以你不能这样做:

target: ['web', 'es5']

也许可以使用这种解决方法...

target: isProduction ? ['web', 'es5'] : 'web'

【讨论】:

【参考方案3】:

我不确定这是否与您的问题有关,但是您使用的是哪个版本的 webpack-cli?由于 webpack-cli v4.0.0,一些人报告了 webpack-dev-server 的这个问题:

Error: Cannot find module 'webpack-cli/bin/config-yargs' #2759

如果您遇到此问题,您可以尝试将 webpack-cli 降级到版本:3.3.0(精确)和 webpack-dev-server 降级到版本: ^3.11.0.

【讨论】:

【参考方案4】:

我遇到了同样的问题 webpack v5.39.0, webpack-cli v4.7.2 webpack-dev-server v3.11.2 我的方式:

npm install -D webpack-dev-server@4.0.0-beta.0

module.exports =target: "web" 在配置中

"start": "webpack serve" 在 package.json 中

【讨论】:

【参考方案5】:

我有同样的错误,这是修复它的原因:

第一

在 Webpack 配置中设置 target: 'web'

在 devServer 配置集下: publicPath: "/assets/",

我的配置将:

    module.exports = 
    target: “web”,
    entry: 
    main: path.resolve(__dirname, “./src/index.js”)
    ,
    output: 
    path: __dirname + “/dist/assets”,
    filename: “bundle.js”,
    publicPath: “assets”
    ,
    mode: “development”,
    devServer: 
    open: true,
    contentBase: “./dist”,
    publicPath: “/assets/”,
    port: 3000,
    hot: false,
    watchContentBase: true
    

【讨论】:

以上是关于Webpack 5 实时重载的主要内容,如果未能解决你的问题,请参考以下文章

webpack 热重载的3种方式

Typescript + webpack(带热重载)+ NodeJS

第562期用 webpack 构建 node 后端代码,使其支持 js 新特性并实现热重载

如何使用express修复webpack dev服务器中的延迟浏览器重载问题

Webpack:热重载不起作用,但更改编译

使用 webpack dev server 和 rails server 的 Webpack 热重载