zoukankan      html  css  js  c++  java
  • webpack 之 HMR热更新 source-map配置

    HMR热更新

    1.配置热更新,在devServer中配置hot,开启HMR功能

     devServer:{
            contentBase: resolve(__dirname,'build'),//自动构建目录,打包后的文件夹
            compress:true,
            port:3000,
            open:true,
            hot:true
        }

    2.此时样式文件已经可以实现热更新,因为style-loader内部实现了,但是js和html文件会出现问题。

     (1)解决html文件问题,将entry改为数组,引入index.html文件,

     html文件:默认不能使用HMR功能,同时会导致问题:html文件不能热更新(不用做HMR功能)
     entry:['./src/index.js','./src/index.html'],

    (2)解决js文件问题,配置js文件

    js文件:默认不能使用HMR功能 --需要修改js代码,添加支持,入口js文件是没法处理的,这里处理非入口的print.js文件
    import print from './print'
    
    print();
    
    if(module.hot){
        //一旦 module.hot 为true,说明开启了HMR功能。 -->让HMR功能代码失效
        module.hot.accept('./print.js',function(){
            //方法会监听 print.js文件变化,一旦发生变化,其他模块不会重新打包构建。
            //会执行后面的回调函数
            print();
        })
    }

     source-map配置

     1.在项目中添加devtool配置

    devtool:'source-map' //cheap-module-souce-map
    
    

    2.参数介绍

    /**
     * source-map :一种提供源代码到构建后代码的映射技术(如果构建后代码出错,可以通过映射追踪源代码错误)
     * [inline-|hidden-|eval-][nosources-][cheap-[module-]]source-map
     * 
     * source-map:外部
     *  错误代码准确信息 和 源代码的错误位置
     * inline-source-map:内联
     * 错误代码准确信息 和 源代码的错误位置
     * 只生成一个内联source-map
     * hidden-source-map:外部
     * 错误代码的错误原因,但是没有错误位置
     * 不能追踪源代码错误,只能提示到构建后代码的错误位置
     * eval-source-map:内联
     * 每个文件都生成对应的source-map,都在eval
     * 错误代码准确信息 和 源代码的错误位置
     * nosources-source-map:外部
     * 能找到错误代码的准确信息,但是没有任何源代码信息
     * cheap-source-map:外部
     * 提示错误信息,和源代码的错误位置,但是只能精确到某一行
     * cheap-module-source-map
     * 错误代码准确信息 和 源代码的错误位置
     * module会将loader的source map加入
     * 
     * 内联 和 外部的区别:1.外部生成了文件,内联没有  2.内联构建速度更快
     * 
     * 开发环境:速度快,调试更友好
     *   速度快(eval>inline>cheap>...)
     *      eval-cheap-source-map
     *      eval-source-map
     *   调试更友好
     *      souce-map
     *      cheap-module-source-map
     *      cheap-source-map
     * 
     *    --> eval-source-map 调试更友好/  eval-cheap-module-source-map 性能更好
     * 
     * 生产环境:源代码要不要隐藏?调试要不要更友好
     *    内联会让代码体积变的非常大,所以在生产环境中不使用内联
     *    nosources-source-map 代码全部隐藏
     *    hidden-source-map 只隐藏源代码,会提示构建后代码错误信息
     * 
     *    -->source-map / cheap-module-souce-map
     */

    2.react项目中devtool配置如下

    devtool: isEnvProduction
          ? shouldUseSourceMap
            ? 'source-map'
            : false
          : isEnvDevelopment && 'cheap-module-source-map',
  • 相关阅读:
    工厂模式
    不错公众号
    linux 下的 正则表达式(awk,sed,awk)学习
    CentOS 7 中安装 bcc-tools
    docker
    Python爬去知乎上问题下所有图片
    过滤重复数据取一条
    阿里云80端口被系统占用
    过滤重复项取时间最近的数据
    Layui的几个问题记录一下
  • 原文地址:https://www.cnblogs.com/hllzww/p/13063863.html
Copyright © 2011-2022 走看看