zoukankan      html  css  js  c++  java
  • webpack学习_模块热替换(Hot Module Peaplacement)

    模块热替换(Hot Module Replacement 或 HMR) 是webpack提供的最有用的功能之一.允许在u女性是更新各种模块,而无需进行完全刷新.

    启用HMR

     承接之前的代码

    webpack.config.js

    ...
    
         const webpack = require('webpack');
    ...
    
      module.exports = {
        entry: {
    -      app: './src/index.js',
    -      print: './src/print.js'
    +      app: './src/index.js'
        },
    ...
        devServer: {+     hot: true
        },
        plugins: [
         ...
             new webpack.NamedModulesPlugin(),
             new webpack.HotModuleReplacementPlugin()
         ...
        ],
      };    

    index.js

    ...
    
     if (module.hot) {
       module.hot.accept('./print.js', function() {
         console.log('Accepting the updated printMe module!');
         printMe();
       })
     }

    print.js(其实可以不改,只是区分之前的)

      export default function printMe() {
           console.log('Updating print.js...')
      }

    运行之后如果修改print里面的console.log里面的语句的话,控制台会输出具体修改的内容和文件,可是点击按钮不会对应更改,需要刷新页面之后从新渲染才会打印出修改后的代码.是因为onclick事件忍让绑在旧的printMe函数上

    使用module.hot.是accept更新绑定到新的printMe函数,这样修改代码之后,点击click事件就会对应输出更改的内容

    index.js

    - document.body.appendChild(component());
    + let element = component(); // 当 print.js 改变导致页面重新渲染时,重新获取渲染的元素
    + document.body.appendChild(element);
    
      if (module.hot) {
        module.hot.accept('./print.js', function() {
          console.log('Accepting the updated printMe module!');
    -     printMe();
    +     document.body.removeChild(element);
    +     element = component(); // 重新渲染页面后,component 更新 click 事件处理
    +     document.body.appendChild(element);
        })
      }

    运行之后自动刷新并且绑在新的printMe函数上

    HMR修改样式(也就是更新样式,页面也会自动更新)

    其实只需要利用style-loader的帮助

    Step1:安装style-loader css-loader

    npm install --save-dev style-loader css-loader

    Step2:在webpack.config.js配置

      module.exports = {
        ...
       module: {
         rules: [
           {
             test: /.css$/,
             use: ['style-loader', 'css-loader']
           }
         ]
       },
        ...
      };

    Step3:创建style.css  src/style.css

    body {
      background: blue;
    }

    Step4:在index.js引入

    ...
     import './styles.css';
    ...

    Step5:运行之后查看结果,接着修改背景颜色,打开浏览器会自动刷新,那么样式也会刷新到

  • 相关阅读:
    Javascript闭包(转)
    Codeigniter 控制器的继承问题
    ThinkPHP3.1 安全快速入门
    怎么在CI中引入外部的JS与CSS呢?
    Node.js学习笔记(一)
    PHP strstr() 字符串匹配函数
    include和require的区别(转)
    【原】把datagridview中的数据保存到txt文档中
    【转】09年.NET面试题
    【转】Developer Express 系列控件使用心得1
  • 原文地址:https://www.cnblogs.com/chorkiu/p/11511775.html
Copyright © 2011-2022 走看看