Webpack -- config配置二

512 阅读2分钟

Webpack中Develoment和Production模式打包区分

开发环境,开发完成,代码上线,生产环境代码需要压缩,看不到代码具体问题

    //package.json
    "scripts":{
      "dev":"weebpack-dev-sever --config ./build/webpack.dev.js",
       "build":"webpack --config ./build/webpack.prod.js"
    }
    //webpack.dev.js //开发环境
    //npm i webpack-merge -D  
    const merge = require("webpack-merge")
    const commconConfig = require('./webpack.common.js')
    const DevConfig = {
      mode:"develoment",
    }
    module.exports = mer(commonConfig,DevConfig) //导出二者的结合
    //webpack.prod。js //生产环境
    const ProdConfig = {
      mode:"production",
    }
    //webpack.common.js //存储公共配置

Webpack和Code Splitting(代码分割)

Code Splitting:对公共代码进行拆分,可以让代码运行速度更快

//开发环境打包
    //package.json
    "scripts":{
      "dev-build":"webpack --config ./build/webpack.dev.js" //用dev的配置文件生成dist目录,在build目录下dist
      "dev":"weebpack-dev-sever --config ./build/webpack.dev.js",
       "build":"webpack --config ./build/webpack.prod.js"
    }

//config
entry:{
  lodash:'./src/loadsh.js',//html会同时引入两个js
    main:'./src/index.js'
}
plugins:[
  newCleanWebpackPlugin(["dist"],{
    root:path,resolve(_dirname,"../") //绝对路径
  }) //重新打包清理文件的目录
]
output:{
  filename:'[name].js',
    path:path,resolve(_dirname,"../dist") //重新生成出口位置
}
  //npm i lodash --save //功能集合
  //index.js
  //import _ from 'loadsh';
  console.log(_.jion(["a","b","c"],"xxx")) //拼接字符串axxxbxxxc,连接函数,连接符
  //业务逻辑过多,使用工具库,会打包同一个文件内,潜在问题,打包文件打,加载时间过长,修改逻辑,重新打包,重新访问需要重新加载,时间长
  
  //解决
  //lodash.js
    import _ from 'loadsh';
window._=_; //挂载在全局上,在其他地方就可以使用_
//业务逻辑改变时,只需加载main.js,


//自动代码分割
import _ from 'loadsh';
  console.log(_.jion(["a","b","c"],"xxx")) //拼接字符串axxxbxxxc,连接函数,连接符

//config.js
optimization:{
  splitChunks:{
    chunks:'all' //允许代码分割,自行切割
  }
}//entry去除loadsh

//index.js
//异步代码同样会被分割,不需要配置config
function getComponent(){
  //代码分割单独起名为lodash
  return import(/*webpackChunkName:"lodash"*/'loadsh').then(({defaule:_})=>{
    //异步获取loadsh
    var element = document.createElement('div');
    element.innerHtml = _.join(['Dell','Lee'],'-');
    return element;
  })
}getComponent().then(element=>[//异步获取loadsh
  document.body.appendChild(element);//挂载到body
])

SplitChunksPlugin配置参数详解

//npm i @babel/plugin-syntax-dynamic-import -D
//config.js
optimization:{
  aplitChunks:{
  	chunks:'all',
      cacheGroups:{
        vebdors:false, //修改打包文件去除前缀名
        default:false,
      }
  }
}
plugins:["@babel/plugin-syntax-dynamic-import"]

cacheGroups

optimization: {
    splitChunks: {
      cacheGroups: {
        commons: {
          name: 'commons',
          chunks: 'initial',
          minChunks: 2
        }
      }
    }
  }