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 相关文章推荐
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
Dec 03 Javascript
jquery实现输入框动态增减的实例代码
Jul 14 Javascript
jQuery中prevUntil()方法用法实例
Jan 08 Javascript
Bootstarp基本模版学习教程
Feb 01 Javascript
javascript编写简易计算器
May 06 Javascript
解决angularjs中同步执行http请求的方法
Aug 13 Javascript
Vuejs开发环境搭建及热更新【推荐】
Sep 07 Javascript
微信小程序实现tab左右切换效果
Nov 15 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
Sep 28 Javascript
Vue 指令实现按钮级别权限管理功能
Apr 23 Javascript
vue2路由基本用法实例分析
Mar 06 Javascript
通过实例解析JavaScript常用排序算法
Sep 02 Javascript
详解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
利用js调用后台php进行数据处理原码
2006/10/09 PHP
php面向对象全攻略 (十) final static const关键字的使用
2009/09/30 PHP
PHP操作mysql函数详解,mysql和php交互函数
2011/05/19 PHP
修改PHP的memory_limit限制的方法分享
2012/02/21 PHP
与文件上传有关的php配置参数总结
2013/06/14 PHP
Yii2 加载css、js 载静态资源的方法
2017/03/10 PHP
kmock javascript 单元测试代码
2011/02/06 Javascript
JavaScript利用正则表达式去除日期中的-
2014/06/09 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
2015/01/29 Javascript
jQuery实现列表内容的动态载入特效
2015/08/08 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
2016/05/07 Javascript
JavaScript中的Array 对象(数组对象)
2016/06/02 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
JavaScript使用prototype原型实现的封装继承多态示例
2018/08/31 Javascript
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
Vue开发中遇到的跨域问题及解决方法
2020/02/11 Javascript
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
python搭建简易服务器分析与实现
2012/12/15 Python
Pycharm远程调试openstack的方法
2017/11/21 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
python机器学习之神经网络实现
2018/10/13 Python
浅析Python与Mongodb数据库之间的操作方法
2019/07/01 Python
修改 CentOS 6.x 上默认Python的方法
2019/09/06 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
2020/08/02 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
澳大利亚办公室装修:JasonL Office Furniture
2019/06/25 全球购物
在校生党员自我评价
2013/09/25 职场文书
物流专业大学的自我评价
2014/01/11 职场文书
2014信息公开实施方案
2014/02/22 职场文书
中学校庆方案
2014/03/17 职场文书
幼儿园爱国卫生月活动总结
2014/06/30 职场文书
代办委托书怎么写
2014/08/01 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书
Python爬虫框架之Scrapy中Spider的用法
2021/06/28 Python
详解Go语言中Get/Post请求测试
2022/06/01 Golang