webpack学习记录

entry和output基本配置:
        entry是打包的入口文件:
                后边是字符串路径,要打包的文件。
         默认打包的文件叫main.js 
         如果想打包两次同样的代码,可以在entry中加一个
         

 entry:{
                   main:'./src/index.js',
                   sub:'./src/index.js'
                  }


          output输出中要配置,
           

 output:{
                    filename:'[name].js',//就是打包entry里配置的key值,name是一个占位符。
                    path:path.resolve(__dirname,"dist")//放置文件的目录名
                  }


         打包好之后想带有域名,
             

output:{
                    publicPath:"http://cdn.com.cn"//添加前缀地址,放到cdn
                 }


          当我们引入两个模块,当第二个模块改变,webpack会发送请求,第一个模块会回到初始化状态,但是我们不想影响到第一个模块,就可以在webpack.config.js中进行配置
           

devServer:{
                    contentBase:"./dist",
                    open:true,
                    port:8080,
                    hot:true,//配置让hot等true
                    hotOnly:true//配置让hotOnly等true(可配置可不配置)当html失效是会重新渲染,这是我们想让它保持现在状态就可以使用hotOnly:true就可以了
                 }


               然后使用。
                 

 plugins:{
                         new webpack.HotModuleReplacementPlugin()//同时要使用的插件,只有配置好这个,html才能生效
                        }


                配置好就不会刷新页面,想让我们改变的数据发生变化就需要添加点代码
            //判断如果我们开启了hot模式,
           

if(module.hot){
                //当我们的number模块发生变化调用第二个参数,也就是回调函数
               module.hot.accept('./number',()=>{
                           //当number文件中发生变化,就重新调用number
                           number()
                     })
              }


              //结果就是有一个之前的结果,和最新的结果,如果我们想把之前的结果清除掉,我们找到之前渲染number的元素节点,然后删除这个节点。这样我们就是拿到最新数据之前的结果也不会再有了。
            如果我们使用的文件比较偏的话就需要这段判断代码,但是vue,react等框加人家是配置好了,所以才不用我们写。
         
    @babel/preset-env配置
     

 module:{
            rules:[{
                     test:/\.js$/,
                     exclude:/node_modules/,
                     loader:'babel-loader',
                     options:{
                            //可以配置一些额外的参数 在babel的官网上有相关配置
                            presets:[[
                                  '@babel/preset-env',
                                   {useBuiltIns:'usege'}
                                ]]
                       }
                   }]
          }

借助babel把ES6代码转成ES5代码
@babel/preset-env配置额外属性
         

  module:{
            rules:[{
                     test:/\.js$/,
                     exclude:/node_modules/,
                     loader:'babel-loader',
                     options:{
                            //可以配置一些额外的参数 在babel的官网上有相关配置
                            presets:[[
                                  '@babel/preset-env',
                                    //根据业务需求,来注入@babel/polyfill,不是适用所有场景,会污染全局环境,如果打包组件库,就换一种配置。
                                     
                                   {useBuiltIns:'usege',//按需引入babel/prolyfill配置
                                    targets:{
                                       chrome:'67',//配置的意思是把ES6的语法变成ES5,是否有必要做这些,如果版本>67就不需要这样的操作,因为都支持ES6语法,所以不用转ES5。
                                      }
                                    }
                                ]]
                       }
                   }]
          }


还需要按需引入@babel/polyfill

如果打包组件库,可以用以下配置,不去污染全局环境
//安装npm i  --save-dev @babel/plugin-transfrom-runtime
//安装npm i --save @babel/runtime
         

 options: {
               plugins:[[
                          "@babel/plugin-transfrom-runtime",
                          {
                             "corejs":2,//如果是2那我们还需要再安装一个包
                             "helpers":true,
                              "regenerator":true,
                              "useESModules":false
                            }
                         ]]
               }


   //安装 npm i --save @babel/runtime-corejs2

  当我们options文件配置过长,可以新建一个 .babelrc文件
         把options里的配置拿过来。就可以了。//不能写注释
  

使用webpack-dev-server打包没有dist目录,而是放到了电脑中的内存里边,提高打包速度,效率更快。


当我们改变样式结果就会刷新页面,我们内容就会被刷没。而我们想要的结果是只替换改变的东西,其他的保留。

devServer:{
      hot:true,//开启HMR
       hotOnly:true//不让浏览器自动刷新
    }

使用babel解析ES6语法,如果没有的话先使用ES5语法。

plugins:{
    //添加这个插件
     new webpack.HotModuleReplacementPlugin()//简称HMR
    }

配置好之后重启服务器 npm run serve,改变有变化的部分,其大部分保留。

如何结合webpack与babel处理ES6语法
      现在的chrome(谷歌浏览器)浏览器支持es6语法。
 babel官方网站:https://www.babeljs.io  ;
 安装 npm i --save-dev  babel-loader @babel/core
   
配置 
 

module:{
         rules:[
               {
                 test:/\.js$/,//js代码只有在src目录下才进行转义。
                 exclude:/node_modules/,//意思是第三方代码,人家已经做好的转换。我们没必要再来转换一次。
                  loader:"babel-loader"
                }
          ]
  }

再安装一个npm i @babel/person-env --save-dev
包含了所有es6转义es5的规则。

module:{
      rules:[{
          test:/\.js$/,
          exclude:/node_modules/,
          loader:"babel-loader",
          options:{
                  presets:["@babel/preset-env"]
            }
        }]
  }


另外要配置
安装 npm i @babel/polyfill
在我们写代码的文件最顶部引入
import "@babel/polyfull";
//如果我们只想让它帮我们解析部分es6语法代码,只需要引入某一部分就可以了,不然会导致我们的打包出来的包过大。可以进行以下优化。

module:{
      rules:[{
          test:/\.js$/,
          exclude:/node_modules/,
          loader:'babel-loader',
          options:{
                //需要改动的部分
                //presets:["@babel/preset-env"]
                   presets:[[
                        '@babel/preset-env',
                        {useBuiltIns:'useage'}
                     ]]
            }
        }]
  }


//配置好之后就是按需引入了,优化我们打包速度和大小
到这一步就配置好了,重启服务。运行就可以了,

SourceMap配置
关掉sourceMap,在开发者模式的时候SourceMap就已经配置好了,默认打开了。

module.exports={
       //添加这行代码,就可以关闭SourceMap
       devtool:'none'
}


这样我们代码报错的话,会提示打包代码里哪里错了,我们想要它提示在源代码里哪里错了。
sourceMap本质上是一个映射关系,打包里错误代码,知道实际源代码中是哪一行错了。
//修改代码

module.exports={
       //配置成source-map就可以使用映射关系了
       devtool:'source-map'
}

//devtool就是配置的SourceMap
//打包过程会变慢,并多出来一个文件,main.js.map文件。
在webpack中的SourceMap配置有很多种配置项。
如果添加一个cheap就会只报哪一行错了,如果不添加cheap就会精确到行和列。

eval是打包速度是最快的。性能最好的打包方式,只能打包简单的,如果项目复杂的话我们,我们还用之前的SourceMap配置。

/*如果是生产环境的话我们不需要提示错误就不用配置SourceMap配置*/

//开发环境下配置 development
devtool:'cheap-module-eval-source-map';
//生产环境下配置 production
devtool:'cheap-module-source-map'

配置好,就可以报错直接显示在源代码的哪一行报错了。


使用webpackDevServer 提升开发效率
  //热更新
    在package.json中scripts
   

"scripts":{
          //"bundle":"webpack"改成
              "watch":"webpack -watch"
      }


     //为了实现炫酷的效果
     在webpack.config.js
      添加一个devServer
     

 devServer:{
              //服务器要起在哪个文件夹下
               contentBase:"./dist"
            }


       在package.json
       

"scripts":{
          //"bundle":"webpack"改成
              "watch":"webpack -watch",
            //新添加start,自动热刷新
              "start":"webpack-dev-server"
      }


     在webpack.config.js中再配置
     

devServer:{
             contentBase:"./dist",
             //添加open
              open:true//自动打开浏览器
            }


        //同时要开启web服务器
       在package.json中
     

"scripts":{
             //新添加一条
               "start":"webpack-dev-server"
            }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值