美文网首页
2020-11-26 Hot Module Replacemen

2020-11-26 Hot Module Replacemen

作者: 夏天的风2020 | 来源:发表于2020-11-27 19:10 被阅读0次
Hot Module Replacement 热模块更新(1)
简写HMR

      //修改package.json中的scripts
      //"script":{
      //   "start":"webpack-dev-server",
      // }

      //webpack.config.js中增加css loader

      //npm run start打包
      //未生成dist目录

      //实际上webpack-dev-serve还是会帮助我们对src下的目录进行打包,
      //但是打包生成的文件并没有放在dist目录下
      //而是放在放到了我们电脑的内存里面
      //这样可以有效的提升打包速度
      //这是webpack-dev-serve隐藏的一个特性

      //src文件下的index.js写些代码
      //es5的代码

      //import './style.css'

      //var btn = document.createElement('button')
      //btn.innerHTML = '新增'
      //documnet.body.appendChild(btn);

      //btn.onclick = function(){
      //  var btn = document.createElement('div')
      //  div.innerHTML = 'item'
      //  documnet.body.appendChild(div);
      //}

      //源代码改变
      //webpack-dev-server会帮助重新打包,重新刷新界面
      //希望当改变样式代码的时候,不要去刷新页面,把样式代码去替换掉就行了
      //可以借助HMR的功能

      // webpack.config.js中
      //引入webpack

      //  devServe:{
      //   contentBase:'./dist', //服务器起到哪个文件夹下
      //   open:true, 
      //   port:8080, 
      //   hot:true, 
      //   hotOnly:true
      // },

      //  hot:true, //让我们的webpack-dev-server开启Hot Module Replacement这样一个功能
      //  hotOnly:true //即便是HMR的功能没有生效,我也不让浏览器自动的重新刷新

      //new webpack.HotModuleReplacementPlugin()

      //改变webpack配置之后,一定要重启命令

      HMR好处
      当我们写css的时候方便我们调试css
      在js里面,
      两个模块,
      一个模块的数据变更不会影响另一个


      //src的index.js中
      //import counter from './counter';
      //import number from './number';

      //counter不变,number重新来执行

      if(module.hot){ //如果当前的项目你开启了HMR的功能
        module.hot.accept('./number',()=>{ //如果number发生了变化,我就会执行后面的函数
        //假设之前的number发生了变化,我把之前的number元素移除掉,
        //再重新执行一下number元素
          documnet.body.removeChild(documnet.getElementById('number'))
          number()  //让number重新执行一下
        })
      }

      //当你在代码里面去引入其他的模块的时候,
      //如果你希望这个模块的代码发生变化,
      //我只去更新这个模块的这部分的代码,
      //那就要用到HMR这样的技术了
      //要想使用HMR,
      //再webpack.config.js中添加配置项
      //   hot:true, 
      //   hotOnly:true 
      // new webpack.HotModuleReplacementPlugin()

      
      //hotOnly:true 可配可不配
      //如果你不配,如果HMR出了问题,webpack-dev-server会自动的帮你重新刷新一下页面
      //不希望它重新帮你刷新页面,写成true就可以了
      //意思就是HMR失效的时候,就让它失效,不要做其它额外的处理

      //css-loader内置了module.hot.accept这样的功能,所以样式引入不需要写

      //


const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CleanWebpackPlugin = require('clean-webpack-plugin');
const webpack = require('webpack');  //引入webpack

module.exports = {
  mode:'development', //开发者模式,默认SourceMap已经被配置进去了
  devtool:'cheap-module-eval-source-map',
  entry:{
    main:'./src/index.js',
  },
  devServe:{
    contentBase:'./dist', //服务器起到哪个文件夹下
    open:true, 
    port:8080, 
    hot:true, //让我们的webpack-dev-server开启Hot Module Replacement这样一个功能
    hotOnly:true  //即便是HMR的功能没有生效,我也不让浏览器自动的重新刷新
  },
  module: {
    rules: [
      {
        test: /\.(jpg|png|gif)$/,
        use:{
          loader:'url-loader',
          options:{
            name:'[name]_[hash].[ext]', 
            outputPath:'images/',
            limit:2048                  
          }
        }
      },
      {
        test: /\.(eot|ttf|svg)$/,
        use:{
          loader: 'file-loader',
        } 
      },
      {
        test: /\.scss$/,
        use:[
          'style-loader',
          {
            loader:'css-loader',
            options:{
              importLoaders:2
            }
          },
          
          'scss-loader',
          'postcss-loader'
          ] 
      },
      {
        test: /\.css$/,
        use:[
          'style-loader',
          'css-loader',
          'postcss-loader'
          ] 
      }
    ]
  },
  plugins: [
    new HtmlWebpackPlugin({
      template:'src/index.html'
    }),
    new HtmlWebpackPlugin(['dist'])],
    new webpack.HotModuleReplacementPlugin(), //添加新的插件
  output:{
        filename:'bundle.js',
        path:path.resolve(_dirname,'dist')
  }
}

相关文章

网友评论

      本文标题:2020-11-26 Hot Module Replacemen

      本文链接:https://www.haomeiwen.com/subject/jctziktx.html