Webpack使用ReactRefreshWebpackPlugin对JSX文件进行本地热更新解析时 $RefreshSig$ is not defined

35 篇文章 476 订阅

前提

最近在进行Webpack5学习时,学习到HMR,也就是模块热替换,也叫模块热更新的时候,遇到了一个问题。

问题

在进行开发环境内模块热更新的时候,React是借助于React Hot Loader来实现的HMR,目前已经改成使用react-refresh来实现了。
于是乎,我进行了以下代码的编写

// webpack.config.js
const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin');
const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
const VueLoaderPlugin = require('vue-loader/lib/plugin');
module.exports = {
  // watch: true,
  entry: "./src/index.js",
  output: {
    filename: "bundle.js",
    path: path.resolve(__dirname, './build'),
    publicPath: "/"
  },
  devServer: {
    hot: true,
    port: 8765
  },
  plugins: [
    new HtmlWebpackPlugin({
      template: './index.html'
    }),
    new ReactRefreshWebpackPlugin(),
    new VueLoaderPlugin()
  ],
  module: {
    rules: [
      {
        test: /\.jsx?$/,
        use: "babel-loader"
      },
      {
        test: /\.vue$/i,
        use: "vue-loader"
      },
      {
        test: /\.css/i,
        use: [
          "style-loader",
          "css-loader"
        ]
      }
    ]
  }
}
// babel.config.js
module.exports = {
  presets: [
    ["@babel/preset-env"],
    ["@babel/preset-react"],
  ],
  plugins: [
    ["react-refresh/babel"]
  ]
}

然后就报出了下述错误。更绝望的是,网上百度不到为什么。
在这里插入图片描述
我一度以为是版本问题,但是怎么处理都不像。
还好最后参照了别人使用这个插件的代码,最后发现了问题。

解决方案

直接说问题解决方案

这里面的问题就在于webpack.config.js内module.exports里面的mode。
只要将这个mode设置为development就不会有问题了

// webpack.config.js
module.exports = {
	mode: 'development' // 就是这里
	....
}

注:这个ReactRefreshWebpackPlugin在进行打包的时候,也会存在上述问题,所以对这个插件需要进行开发环境和打包环境的区分。production环境不能引入这个插件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值