Hot reload with bundled assets are not being loaded/auto refresh in browser

I am trying to hot reload with my project's bundled assets, but hot reload is not executing the browser refreshes when I make changes to any of my files.

I am looking at the F12 browser console, but nothing is being executed or loading, its just blank.

functions.php

function workshop_01_theme() {
    wp_enqueue_script('workshop_01-js', get_theme_file_uri('/bundled-assets/scripts.bedc8565a6cb22e37037.js'), NULL, '1.0', true);
    wp_enqueue_style('worskshop_01-style', get_theme_file_uri('/bundled-assets/styles.bedc8565a6cb22e37037.css'));
}
add_action('wp_enqueue_scripts', 'workshop_01_theme');

package.json

{
  name: workshop_01,
  version: 1.0.0,
  description: ,
  main: index.js,
  scripts: {
    dev: npm-run-all -p devFast buildWatch,
    devFast: webpack serve,
    buildWatch: webpack --watch,
    build: webpack,
    test: echo \Error: no test specified\  exit 1
  },
  keywords: [],
  author: ,
  license: ISC,
  dependencies: {
    @babel/core: ^7.14.5,
    @babel/preset-env: ^7.14.5,
    @babel/preset-react: ^7.14.5,
    @glidejs/glide: ^3.4.1,
    autoprefixer: ^10.2.6,
    axios: ^0.21.1,
    babel-loader: ^8.2.2,
    clean-webpack-plugin: ^4.0.0-alpha.0,
    css-loader: ^5.2.6,
    cssnano: ^5.0.6,
    fs-extra: ^10.0.0,
    jquery: ^3.6.0,
    mini-css-extract-plugin: ^1.6.0,
    normalize.css: ^8.0.1,
    npm-run-all: ^4.1.5,
    postcss-color-function: ^4.1.0,
    postcss-hexrgba: ^2.0.1,
    postcss-import: ^14.0.2,
    postcss-loader: ^6.1.0,
    postcss-mixins: ^8.1.0,
    postcss-nested: ^5.0.5,
    postcss-simple-vars: ^6.0.3,
    react: ^17.0.2,
    react-dom: ^17.0.2,
    style-loader: ^2.0.0,
    webpack: ^5.38.1,
    webpack-cli: ^4.7.2,
    webpack-dev-server: ^3.11.2,
    webpack-manifest-plugin: ^3.1.1
  }
}

scripts.js

import ../css/styles.css

// Allow new JS and CSS to load in browser without a traditional page refresh
if (module.hot) {
  module.hot.accept()
}

webpack.config.js

const currentTask = process.env.npm_lifecycle_event
const path = require(path)
const MiniCssExtractPlugin = require(mini-css-extract-plugin)
const { CleanWebpackPlugin } = require(clean-webpack-plugin)
const { WebpackManifestPlugin } = require(webpack-manifest-plugin)
const fse = require(fs-extra)

const postCSSPlugins = [require(postcss-import), require(postcss-mixins), require(postcss-simple-vars), require(postcss-nested), require(postcss-hexrgba), require(postcss-color-function), require(autoprefixer)]

class RunAfterCompile {
  apply(compiler) {
    compiler.hooks.done.tap(Update functions.php, function () {
      // update functions php here
      const manifest = fse.readJsonSync(./bundled-assets/manifest.json)

      fse.readFile(./functions.php, utf8, function (err, data) {
        if (err) {
          console.log(err)
        }

        const scriptsRegEx = new RegExp(/bundled-assets/scripts.+?', g)
        const vendorsRegEx = new RegExp(/bundled-assets/vendors.+?', g)
        const cssRegEx = new RegExp(/bundled-assets/styles.+?', g)

        let result = data.replace(scriptsRegEx, `/bundled-assets/${manifest[scripts.js]}'`).replace(vendorsRegEx, `/bundled-assets/${manifest[vendors~scripts.js]}'`).replace(cssRegEx, `/bundled-assets/${manifest[scripts.css]}'`)

        fse.writeFile(./functions.php, result, utf8, function (err) {
          if (err) return console.log(err)
        })
      })
    })
  }
}

let cssConfig = {
  test: /\.css$/i,
  use: [css-loader?url=false, { loader: postcss-loader, options: { postcssOptions :{ plugins: postCSSPlugins } }}]
}

let config = {
  entry: {
    scripts: ./js/scripts.js
  },
  plugins: [],
  module: {
    rules: [
      cssConfig,
      {
        test: /\.js$/,
        exclude: /(node_modules)/,
        use: {
          loader: babel-loader,
          options: {
            presets: [@babel/preset-react, [@babel/preset-env, { targets: { node: 12 } }]]
          }
        }
      }
    ]
  }
}

if (currentTask == devFast) {
  config.devtool = source-map
  cssConfig.use.unshift(style-loader)
  config.output = {
    filename: bundled.js,
    publicPath: http://localhost:3000/
  }
  config.devServer = {
    before: function (app, server) {
      // server._watch([./**/*.php, ./**/*.js])
      server._watch([./**/*.php, !./functions.php])
    },
    public: http://localhost:3000,
    publicPath: http://localhost:3000/,
    disableHostCheck: true,
    contentBase: path.join(__dirname),
    contentBasePublicPath: http://localhost:3000/,
    hot: true,
    port: 3000,
    headers: {
      Access-Control-Allow-Origin: *
    }
  }
  config.mode = development
}

if (currentTask == build || currentTask == buildWatch) {
  cssConfig.use.unshift(MiniCssExtractPlugin.loader)
  postCSSPlugins.push(require(cssnano))
  config.output = {
    publicPath: /wp-content/themes/workshop_01/bundled-assets/,
    filename: [name].[chunkhash].js,
    chunkFilename: [name].[chunkhash].js,
    path: path.resolve(__dirname, bundled-assets)
  }
  config.mode = production
  config.optimization = {
    splitChunks: { chunks: all }
  }
  config.plugins.push(new CleanWebpackPlugin(), new MiniCssExtractPlugin({ filename: styles.[chunkhash].css }), new WebpackManifestPlugin({ publicPath:  }), new RunAfterCompile())
}

module.exports = config

my webpack config file may be the issue, but I dont know what I should be doing to make hot reload work for my project here...

Topic workflow css Wordpress

Category Web

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.