webpack HMR热更新 不使用webpack-dev-server

不想用webpack-dev-server(想自己学着配置一下),就这么简单

【涉及版本】:

  • webpack4 (4.44.1)

【问题】:

  • 编译更新了,但页面不会自动刷新,查了下解决办法,附上

【包解释】
【chokidar】:监听文件变化并刷新页面

// 用于执行webpack的app.js
// 引入chokidar
const chokidar = require('chokidar');
// webpack()
  var webpack = require('webpack'),
      webpackDevMiddleware = require('webpack-dev-middleware'),
      webpackHotMiddleware = require('webpack-hot-middleware'),
      webpackDevConfig = require('./build/webpack.config');
      
  var compiler = webpack(webpackDevConfig);
  
  const devMiddleWare = webpackDevMiddleware(compiler, {
    publicPath: webpackDevConfig.output.publicPath,
    noInfo: true,
    hot: true,
    // 这里强制将html文件写入(需要为编译后的html文件设置模板引擎)
    writeToDisk: (filename) => {
      return /\.html$/.test(filename)
    },
    stats: {
      colors: true
    }
  })
  const hotMiddleware = webpackHotMiddleware(compiler)
  app.use(devMiddleWare)
  app.use(hotMiddleware);
  // 以下开始监听目标文件/dist/index.html的变动,watcher.on('change',...)时候触发更新
  app.active = ()=>{
    const watcher = chokidar.watch([
        path.resolve(__dirname, '/dist/index.html'),
    ]);
    watcher.on('ready', function() {
        console.log('Initial scan complete. Ready for changes');
    });
    watcher.on('change', function(path) {
        console.log('File [' + path + '] changed !');
        // 重点!!  reload the client on file changes
        hotMiddleware.publish({action: 'reload'});
    });
  }

  app.active()
  
  // ------------------------- webpack.config.js文件 -----------------------------

const HotMiddleWareConfig = 'webpack-hot-middleware/client?path=/__webpack_hmr&timeout=20000';
// 入口文件处增加
  entry:{
    main: [HotMiddleWareConfig, resolve('src/main.js')],
  },
// plugins中增加一项
  plugins:[
    new webpack.HotModuleReplacementPlugin(),
  ]
  

结束,希望帮助到大家
我女神

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 对于webpack-dev-server的用法,我可以告诉你,webpack-dev-server是一个用于开发环境的快速web服务器,它可以使用内存中的文件系统来提供静态文件服务,可以支持热模块替换(HMR)。它可以通过添加--hot参数来启用热更新,可以通过添加--inline参数来启用实时重载,还可以添加--open参数来自动打开浏览器。 ### 回答2: webpack-dev-server 是一个基于 Node.js 的轻量级开发服务器,用于在开发阶段快速启动和调试 Webpack 构建的应用程序。 使用 webpack-dev-server 需要先全局安装 webpackwebpack-dev-server,然后在项目中安装 webpackwebpack-cli。 使用 webpack-dev-server 的基本用法如下: 1. 在项目的配置文件中(比如 webpack.config.js),设置 entry、output 和其他需要的配置。 2. 安装好 webpack-dev-server 后,在终端输入 `webpack-dev-server` 启动服务器。 3. 默认情况下,webpack-dev-server 会启动在 localhost:8080 上,可以在浏览器中访问该地址来查看编译后的应用。 4. webpack-dev-server 在内存中编译和打包应用程序,并通过 WebSocket 将应用程序的修改通知到浏览器,实现热模块替换(Hot Module Replacement)的功能。 5. webpack-dev-server 还提供了一些额外的配置选项,比如设置监听的端口号、是否自动打开浏览器、是否使用 HTTPS 等等。这些选项可以在启动 webpack-dev-server 时通过命令行参数或在配置文件中进行配置。 总结来说,webpack-dev-server 是一个方便的工具,能够帮助我们快速启动和调试 Webpack 构建的应用程序,在开发过程中提供热更新的功能,提高开发效率。 ### 回答3: webpack-dev-server是一个为开发环境提供的快速开发服务器。它是一个基于Node.js的工具,能够在本地运行webpack打包后的应用,以便于开发人员能够实时预览和调试应用。 使用webpack-dev-server的步骤如下: 1. 首先,在项目的根目录中安装webpack-dev-server,可以通过npm或者yarn进行安装。例如,在命令行中输入`npm install webpack-dev-server --save-dev`。 2. 在webpack配置文件中进行相应的配置。需要注意的是,配置文件中需要添加`devServer`选项,并设置一些属性,例如`contentBase`指定服务器启动的文件目录,`port`指定服务器运行的端口号等等。这些配置可以根据自身的需求进行调整。 3. 在项目中添加一个启动脚本。在项目的`package.json`文件中的`scripts`字段中添加一个脚本,例如`"start": "webpack-dev-server"`。然后,在命令行中输入`npm start`即可启动webpack-dev-server。 4. 此时,webpack-dev-server会根据配置文件中的选项,启动一个本地服务器,并监听指定的端口。在浏览器中打开`localhost:port`(port为配置文件中设置的端口号),即可在实时预览应用程序。 webpack-dev-server还提供了一些其他的功能,例如热模块替换(Hot Module Replacement),它能够在应用代码变动时,自动刷新浏览器,以保持应用状态的连续性。 总而言之,webpack-dev-server是一个非常方便的工具,能够提高开发效率,实时预览和调试应用程序。它简化了项目的配置过程,并提供了一些有用的功能,确保开发人员能够更加便捷地进行开发工作。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值