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 相关文章推荐
基于jquery 的一个progressbar widge
Oct 29 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
Dec 28 Javascript
jquery中使用ajax获取远程页面信息
Nov 13 Javascript
JS交换变量的方法
Jan 21 Javascript
详细分析Javascript中创建对象的四种方式
Aug 17 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
Nov 25 Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
Feb 27 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
Aug 01 jQuery
AngularJS实现自定义指令及指令配置项的方法
Nov 20 Javascript
解决layui的table插件无法多层级获取json数据的问题
Sep 19 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
Apr 20 Javascript
vue实现移动端H5数字键盘组件使用详解
Aug 25 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
PHP个人网站架设连环讲(一)
2006/10/09 PHP
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
2010/06/03 PHP
php遍历删除整个目录及文件的方法
2015/03/13 PHP
Linux系统中为php添加pcntl扩展
2016/08/28 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
2018/04/24 PHP
php设计模式之工厂模式用法经典实例分析
2019/09/20 PHP
纯CSS3实现质感细腻丝滑按钮
2021/03/09 HTML / CSS
学习jquery之一
2007/04/27 Javascript
JQuery toggle使用分析
2009/11/16 Javascript
JavaScript中的console.group()函数详细介绍
2014/12/29 Javascript
AngularJS 依赖注入详解和简单实例
2016/07/28 Javascript
JS实现一次性弹窗的方法【刷新后不弹出】
2016/12/26 Javascript
微信小程序  checkbox组件详解及简单实例
2017/01/10 Javascript
微信小程序中时间戳和日期的相互转换问题
2018/07/09 Javascript
jQuery实现的简单歌词滚动功能示例
2019/01/07 jQuery
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
Python中eval带来的潜在风险代码分析
2017/12/11 Python
基于python 二维数组及画图的实例详解
2018/04/03 Python
python write无法写入文件的解决方法
2019/01/23 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
django queryset 去重 .distinct()说明
2020/05/19 Python
如何用Python和JS实现的Web SSH工具
2021/02/23 Python
iphoneX 适配客户端H5页面的方法教程
2017/12/08 HTML / CSS
马来西亚网上花店:FlowerAdvisor马来西亚
2020/01/03 全球购物
师范生教师实习自我鉴定
2013/09/27 职场文书
考博自荐信
2013/10/25 职场文书
2014年大学生四年规划书范文
2014/04/03 职场文书
企业新年寄语
2014/04/04 职场文书
小区门卫岗位职责范本
2014/08/24 职场文书
旷课检讨书500字
2014/10/14 职场文书
教师党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
理想国读书笔记
2015/06/25 职场文书
七年级作文之英语老师
2019/10/28 职场文书
PYTHON使用Matplotlib去实现各种条形图的绘制
2022/03/22 Python
React四级菜单的实现
2022/04/08 Javascript