HMR: hot module replacement 热模块替换 / 模块热替换
    作用 : 一个模块发生变化,自会重新打包这一个模块 (而不是打包所有模块) 极大提升构建速度
    开启: 在webpack-dev-server中开启 hot: true 。 开启后需要重启webpack服务

    hot 对各种文件的作用

    • 样式文件: 可以使用 HMR 功能; 因为 style-loader 内部实现了
    • js 文件: 默认不能使用 HMR 功能 , 解决:通过代码实现 , 在需要变化的js文件中加入变化的代码

    注意: HMR功能对js处理,只能处理 非入口文件,入口文件改变还是会全部重新打包

    1. import print from './print.js';
    2. function add(x, y) {
    3. print();
    4. return x + y;
    5. }
    6. console.log(add(1, 2));
    7. console.log(add(2, 2));
    8. console.log(add(2, 5));
    9. if (module.hot) {
    10. // 一旦 module.hot 为true, 说明开启了 HMR 功能。 让HMR功能生效
    11. module.hot.accept('./print.js', function() {
    12. // 方法会监听 print.js 文件的变化,一旦变化,其他模块不会重新打包
    13. // 会执行回调函数
    14. print();
    15. })
    16. }
    • html文件 : 默认不能使用 HMR 功能, 同时会导致html文件不能热更新了 (不需要做HRM功能)

      1. 解决: 修改entry入口, html文件引入
    1. /**
    2. * 使用 HMR功能
    3. *
    4. * HMR: hot module replacement 热模块替换 / 模块热替换
    5. * 作用 : 一个模块发生变化,自会重新打包这一个模块 (而不是打包所有模块)
    6. * 极大提升构建速度
    7. *
    8. * 开启: 在webpack-dev-server中开启 hot: true
    9. *
    10. * 开启后需要重启webpack服务
    11. *
    12. *
    13. * hot 对各种文件的作用
    14. *
    15. * 样式文件: 可以使用 HMR 功能; 因为 style-loader 内部实现了
    16. * js 文件: 默认不能使用 HMR 功能 , 解决:通过代码实现
    17. * 在需要变化的js文件中加入变化的代码
    18. * if (module.hot) {
    19. // 一旦 module.hot 为true, 说明开启了 HMR 功能。 让HMR功能生效
    20. module.hot.accept('./print.js', function() {
    21. // 方法会监听 print.js 文件的变化,一旦变化,其他模块不会重新打包
    22. // 会执行回调函数
    23. print();
    24. })
    25. }
    26. 注意: HMR功能对js处理,只能处理 非入口文件,入口文件改变还是会全部重新打包
    27. * html文件 : 默认不能使用 HMR 功能, 同时会导致html文件不能热更新了 (不需要做HRM功能)
    28. * 解决: 修改entry入口, 将html文件引入
    29. */