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 相关文章推荐
一直复略了的一个问题,关于表单重复提交
Feb 15 Javascript
jQuery中ajax的load()方法用法实例
Dec 26 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
Jan 05 Javascript
JS上传组件FileUpload自定义模板的使用方法
May 10 Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
May 30 Javascript
关于JS中二维数组的声明方法
Sep 24 Javascript
js获取指定字符前/后的字符串简单实例
Oct 27 Javascript
laydate日历控件使用方法详解
Nov 20 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
Nov 29 Javascript
基于vue2.0动态组件及render详解
Mar 17 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
May 22 Javascript
使用electron将vue-cli项目打包成exe的方法
Sep 29 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
PHP5 安装方法
2007/01/15 PHP
解析php时间戳与日期的转换
2013/06/06 PHP
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
php中动态修改ini配置
2014/10/14 PHP
php 伪造ip以及url来路信息方法汇总
2014/11/25 PHP
php递归json类实例
2014/12/02 PHP
php实现utf-8转unicode函数分享
2015/01/06 PHP
初识PHP中的Swoole
2016/04/05 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
jQuery 1.0.4 - New Wave Javascript(js源文件)
2007/01/15 Javascript
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
javascript学习笔记(五)正则表达式
2011/04/08 Javascript
页面只能打开一次Cooike如何实现
2012/12/04 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
AngularJS  双向数据绑定详解简单实例
2016/10/20 Javascript
jQuery Checkbox 全选 反选的简单实例
2016/11/29 Javascript
vue 组件的封装之基于axios的ajax请求方法
2018/08/11 Javascript
vue-router路由懒加载及实现的3种方式
2021/02/28 Vue.js
[06:37]2014DOTA2国际邀请赛 昔日王者渴望重回巅峰
2014/07/12 DOTA
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
PyChar学习教程之自定义文件与代码模板详解
2017/07/17 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
python实现微信发送邮件关闭电脑功能
2018/02/22 Python
解决python3 网络请求路径包含中文的问题
2018/05/10 Python
Python Pandas中根据列的值选取多行数据
2019/07/08 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
2020/12/16 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
字符串str除首尾字符外的其他字符按升序排列
2013/03/08 面试题
网络技术专业推荐信
2014/02/20 职场文书
个性车贴标语
2014/06/24 职场文书
父亲去世追悼词
2015/06/23 职场文书
2016年母亲节寄语
2015/12/04 职场文书
浅谈Redis的事件驱动模型
2022/05/30 Redis
分享几个实用的CSS代码块
2022/06/10 HTML / CSS
win10如何快速切换窗口 win10切换窗口快捷键分享
2022/07/23 数码科技