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自定义DateDiff函数(兼容所有浏览器)
Mar 01 Javascript
关于JS控制代码暂停的实现方法分享
Oct 11 Javascript
jquery设置元素的readonly和disabled的写法
Sep 22 Javascript
js实现单行文本向上滚动效果实例代码
Nov 28 Javascript
浅谈jQuery中replace()方法
May 13 Javascript
JQuery实现鼠标移动图片显示描述层的方法
Jun 25 Javascript
JavaScript实现点击单选按钮改变输入框中文本域内容的方法
Aug 12 Javascript
JS中微信小程序自定义底部弹出框
Dec 22 Javascript
JavaScript时间戳与时间日期间相互转换
Dec 11 Javascript
bootstrap动态调用select下拉框的实例代码
Aug 09 Javascript
Vue Element校验validate的实例
Sep 21 Javascript
React四级菜单的实现
Apr 08 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
初学CAKEPHP 基础教程
2009/11/02 PHP
一个简单的网页密码登陆php代码
2012/07/17 PHP
Php中使用Select 查询语句的实例
2014/02/19 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
PHP单元测试框架PHPUnit用法详解
2019/01/23 PHP
JavaScript Cookie的读取和写入函数
2009/12/08 Javascript
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
纯js简单日历实现代码
2013/10/05 Javascript
jQuery中使用Ajax获取JSON格式数据示例代码
2013/11/26 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
jQuery中ready事件用法实例
2015/01/19 Javascript
JS实现的4种数字千位符格式化方法分享
2015/03/02 Javascript
使用javascript提交form表单方法汇总
2015/06/25 Javascript
jquery使用Cookie和JSON记录用户最近浏览历史
2016/04/19 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
通过原生JS实现为元素添加事件的方法
2016/11/23 Javascript
BootStrap框架中的data-[ ]自定义属性理解(推荐)
2017/02/14 Javascript
Angular.js实现动态加载组件详解
2017/05/28 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
2017/06/01 Javascript
JS实现问卷星自动填问卷脚本并在两秒自动提交功能
2020/06/17 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
vue.js中ref和$refs的使用及示例讲解
2019/08/14 Javascript
Vue Components 数字键盘的实现
2019/09/18 Javascript
Python爬虫信息输入及页面的切换方法
2018/05/11 Python
Python中Numpy mat的使用详解
2019/05/24 Python
sklearn-SVC实现与类参数详解
2019/12/10 Python
Python GUI库PyQt5样式QSS子控件介绍
2020/02/25 Python
python语言的优势是什么
2020/06/17 Python
深入CSS3 动画效果的总结详解
2013/05/09 HTML / CSS
数以千计的折扣工业产品:ESE Direct
2018/05/20 全球购物
大学生就业自我鉴定
2013/10/26 职场文书
交通事故赔偿协议书
2014/04/15 职场文书
环境卫生工作汇报材料
2014/10/28 职场文书
idea编译器vue缩进报错问题场景分析
2021/07/04 Vue.js