treeShaking&scopeHosit&hot&懒加载打包

412 阅读2分钟

treeshaking(摇晃树,也就是把不需要的东西拿下来)

  1. 生产环境下的插件
  2. package.json下设定sideEffects:false 优缺点: 自动判定,只要引入没使用的都会去掉
  "sideEffects":false,
  "sideEffects":["**/*.css"], // 这样的话是识别的时候会刨除掉.css文件

scopeHosit (减少作用域的产生)

webpack4以后是自动执行不用管 特性: 每次执行都是把页面内部使用的属性会自动累加,不会形成多个作用域 举例:

let a = 1;
let b = 2;
let c = a + b;
export default c

hot(热更新)

css热更新

webpack.config.js的devServer的hot属性 每次刷新都是局部的css刷新,不用每次修改属性都刷新页面,提升效率

  • 如果是style-loader是热更新,但是如果是用minicssloader就不热更新(把css分离成为link标签那种,就不热更新了)

    • 解决: 在plugins里引入new webpack.hotModuleReplacementPlugin()
      plugins: [ // 这里存放的是webpack的插件
      // new webpack.hotModuleReplacementPlugin(), // css插件热更新
    

    js热更新

    1. 需要检测module.hot如果是true,就触发热更新
    2. 手动设置路径'./test'.default
    3. 然后动态设置元素内容为返回值

懒加载(动态加载模块)

  1. 点击的时候动态引入(不是module的引入,)不太懂
  2. 在webpack.config.js文件里写一个值,name是动态的0123

懒加载的模块重命名

webpackprefetch预引入模块(在其他文件都加载完成的情况下,预引入一些模块),引入是不能看到,加载是可以看到的模块. vue都是使用了预引入

webpackpreload 预加载

跟子模块同时异步加载,不影响的.但是不会引入

打包文件分析图表(生产环境下引入)

  • webpack-bundle-analyzer
  • 需要npm安装 然后webpack.config.js页面require引入,需要解构 然后在plugin页面new执行
  • splitchunkS(包分割)

resolve(设置别名=>@符代表src)

  • extensions(拓展)
    • 每次书写路径不用写.js就是因为这里设定了自动寻找.js文件
    • 后面可以写多个文件格式,会一次寻找
  • alias(别名)
    • 每个文件路径都可以给起一个别名作为快速查找的方式 ,比如很多项目@符代表src

happyback(多线程打包)

百度吧

根据mode分离配置环境

1.会拆分掉webpack.config.js文件到下面三个文件 2.如果是这三个文件,会先加载base文件,然后根据情况执行dev/prod

  • webpack.base.js // 公共配置
  • webpack.dev.js 开发配置
  • webpack.prod.js 生产配置

3.需要引入webpack-merge合并公共配置和开发/生产配置 原本的webpack.config.js的配置私有部分会放在base对象里