webpack -- 长缓存优化

场景一: 改变业务代码, 第三方(vendor)不变化

解决:
1. 提取第三方代码
2. 将hash –> chunkhash
3. 提取 webpack runtime

var path = require('path')
var webpack = require('webpack')
module.exports = {
  entry:{
    main:'./src/foo',
    vendor:['vue'] //第三方JS代码
  },
  output:{
    path: path.resolve(__dirname,'dist'),
    filename:'[name].[chunkhash].js'
    // chunkHash: 打包好的包的hash值
  },
  plugins:[
    // 提取公共代码
    new webpack.optimize.CommonsChunkPlugin({
      name:'vendor',
      minChunks:Infinity
    }),
    // 提取 webpack runtime
    new webpack.optimize.CommonsChunkPlugin({
      name:'manifest'
    })
  ]
}
场景二: 引入新模块,模块的顺序变化, 第三方(vendor hash) 不变化

解决: 将打包的包用namequ区分而不用id
NamedChunksPlugin
NamedModulesPlugin

var path = require('path')
var webpack = require('webpack')
module.exports = {
  entry:{
    main:'./src/foo',
    vendor:['vue'] //第三方JS代码
  },
  output:{
    path: path.resolve(__dirname,'dist'),
    filename:'[name].[chunkhash].js'
    // chunkHash: 打包好的包的hash值
  },
  plugins:[
    // 将打包的包用namequ区分而不用id
    new webpack.NamedChunksPlugin(),
    new webpack.NamedModulesPlugin(),
    // 提取公共代码
    new webpack.optimize.CommonsChunkPlugin({
      name:'vendor',
      minChunks:Infinity
    }),
    // 提取 webpack runtime
    new webpack.optimize.CommonsChunkPlugin({
      name:'manifest'
    })
  ]
}
场景三: 动态引入模块 第三方(vendor hash)不变化

解决:定义动态模块的chunkName

import(/*webpackChunkName:'sync'*/'./sync').then(()=>{ ... })
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值