webpack 从指定入口文件中提取公共文件的方法


Posted in Javascript onNovember 13, 2018

在不明白CommonsChunkPlugin的使用情况下,直接上手webpack4的splitChunks,实在是难上加难。为了能更好的理解splitChunks的使用,必须出个题目,练练手,才能从中有所收获(下面的题目不考虑实际应用场景):

从指定入口文件中提取公共文件

CommonsChunkPlugin的实现:
entry: {
    index:'./src/index.js',
    index1:'./src/index1.js',
    index2:'./src/index2.js'
},
plugins: [
  new CommonsChunkPlugin({
    name:"common1",
    chunks:['index','index1','index2']
  })
]

其中index和index1以及index2都是打包的入口文件。

splitChunks的实现:

optimization: {
    splitChunks: {
      chunks:"all",
      minSize: 0,
      cacheGroups: {
        common: {
          minChunks: 3,
          priority: -1,
          name:'common',
          chunks (chunk) {
            // exclude `my-excluded-chunk`
            return ['index','index1','index2'].includes(chunk.name);
          }
        }
      }
    }
  }

在cacheGroups下面我们定义了一个common。通过chunks函数,指定三个入口文件为:'index','index1','index2',同时我们还要设置minChunks为3,表示指定三个入口文件中提取出的公共文件,最少要被三个不同的入口文件引用。所以就是从三个入口文件中提取公共的文件。

从两个公共文件中,再提取公共部分

先说一下,这是什么意思:

  • 有6个公共文件a,b,c,d,e,f。
  • 从a,b,c中提取其公共的部分x,从d,e,f中也提取公共部分y。
  • 从x,y中再提取公共部分z。

下面给出webpack3 和webpack4下的处理

CommonsChunkPlugin的实现:

new CommonsChunkPlugin({
  name:"common1",
  chunks:['index','index1','index2']
}),
new CommonsChunkPlugin({
  name:"common2",
  chunks:['app','app1','app2']
}),
new CommonsChunkPlugin({
  name:"common3",
  chunks:['common1','common2']
})

很清楚,先从'index','index1','index2'中提取公共文件‘common1',再从'app','app1','app2'中提取公共文件‘common2'。最后从‘common1'和‘common2'中再提取出公共文件common3。

splitChunks的实现:

optimization: {
    runtimeChunk: 'single',
    splitChunks: {
      chunks:"all",
      minSize: 0,
      cacheGroups: {
        common3: {
         minChunks: 6,
         priority: 1,
         reuseExistingChunk: true
        },
        common2: {
          minChunks: 3,
          priority: -2,
          name:'common2',
          chunks (chunk) {
            // exclude `my-excluded-chunk`
            return ['app','app1','app2'].includes(chunk.name);
          }

        },
        common1: {
          priority: -1,
          name: 'common1',
          minChunks: 3,
          enforce: true,
          chunks (chunk) {
            return ['index','index1','index2'].includes(chunk.name);
          }
        }
      }
    }
  }

我没有从文档中找到:提取公共文件之后再处理的方法。所以我用了另外一种方式:

  • 先从6个文件中提取出公共的文件,即common3(common1和common2的公共文件)。
  • 从'index','index1','index2'中提取common1
  • 从'app','app1','app2'中提取common2

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
ExtJS 2.0实用简明教程 之ExtJS版的Hello
Apr 29 Javascript
jquery 常用操作方法
Jan 28 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
Oct 11 Javascript
JS测试显示屏分辨率以及屏幕尺寸的方法
Nov 22 Javascript
Javascript异步编程模型Promise模式详细介绍
May 08 Javascript
JavaScript函数详解
Feb 27 Javascript
javascript中DOM复选框选择用法实例
May 14 Javascript
vue中遇到的坑之变化检测问题(数组相关)
Oct 13 Javascript
Nuxt配合Node在实际生产中的应用详解
Aug 07 Javascript
微信小程序http连接访问解决方案的示例
Nov 05 Javascript
jQuery实现可以扩展的日历
Dec 01 jQuery
vuex Module将 store 分割成模块的操作
Dec 07 Vue.js
详解Vue实战指南之依赖注入(provide/inject)
Nov 13 #Javascript
node.js爬取中关村的在线电瓶车信息
Nov 13 #Javascript
详解Vue SSR( Vue2 + Koa2 + Webpack4)配置指南
Nov 13 #Javascript
详解Vue组件插槽的使用以及调用组件内的方法
Nov 13 #Javascript
Vue实现一个无限加载列表功能
Nov 13 #Javascript
Vue实现移动端页面切换效果【推荐】
Nov 13 #Javascript
vue中slot(插槽)的介绍与使用
Nov 12 #Javascript
You might like
PHP MYSQL乱码问题,使用SET NAMES utf8校正
2009/11/30 PHP
PHP 验证码的实现代码
2011/07/17 PHP
thinkphp中多表查询中防止数据重复的sql语句(必看)
2016/09/22 PHP
漂亮的提示信息(带箭头)
2007/03/21 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
2011/09/09 Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
2011/10/23 Javascript
Array 重排序方法和操作方法的简单实例
2014/01/24 Javascript
js中一维数组和二位数组中的几个问题示例说明
2014/07/17 Javascript
根据当前时间在jsp页面上显示上午或下午
2014/08/18 Javascript
jQuery链式操作实例分析
2015/11/16 Javascript
详解JavaScript的变量和数据类型
2015/11/27 Javascript
Vue.js路由组件vue-router使用方法详解
2016/12/02 Javascript
ajax+node+request爬取网络图片的实例(宅男福利)
2017/08/28 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
2018/09/03 Javascript
axios 封装上传文件的请求方法
2018/09/26 Javascript
Vue2 添加数据可视化支持的方法步骤
2019/01/02 Javascript
javascript中join方法实例讲解
2019/02/21 Javascript
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
2020/03/13 Javascript
[01:10]3.19DOTA2发布会 三代刀塔人第一代
2014/03/25 DOTA
Python实现的计数排序算法示例
2017/11/29 Python
Python编程实现使用线性回归预测数据
2017/12/07 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
python实现微信自动回复及批量添加好友功能
2019/07/03 Python
Python操作SQLite数据库过程解析
2019/09/02 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
微软巴西官方网站:Microsoft Brasil
2019/09/26 全球购物
运动会广播稿500字
2014/01/28 职场文书
养生餐厅创业计划书范文
2014/03/26 职场文书
2014年学校总务处工作总结
2014/12/08 职场文书
2015年科协工作总结
2015/05/19 职场文书
就业指导讲座心得体会
2016/01/15 职场文书
如何写一份具有法律效力的借款协议书?
2019/07/02 职场文书
OpenCV-Python实现图像平滑处理操作
2021/06/08 Python
在Windows Server 2012上安装 .NET Framework 3.5 所遇到的问题
2022/04/29 Servers
Nginx利用Logrotate实现日志分割
2022/05/20 Servers