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

哀鸿遍野
• 阅读 2653

在不明白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,表示指定三个入口文件中提取出的公共文件,最少要被三个不同的入口文件引用。所以就是从三个入口文件中提取公共的文件。

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

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

  1. 有6个公共文件a,b,c,d,e,f。
  2. 从a,b,c中提取其公共的部分x,从d,e,f中也提取公共部分y。
  3. 从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);
                    }
                }
            }
        }
    }

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

  1. 先从6个文件中提取出公共的文件,即common3(common1和common2的公共文件)。
  2. 从'index','index1','index2'中提取common1
  3. 从'app','app1','app2'中提取common2
点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Karen110 Karen110
4年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
待兔 待兔
1年前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Easter79 Easter79
3年前
vue iview element
首先安装babelpolyfillnpminstallbabelpolyfillsavedev入口文件引用,在main.js中引用import'babelpolyfill'配置文件webpack.base.conf.js修改entry:{app:'./src/main.j
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
3年前
HIVE 时间操作函数
日期函数UNIX时间戳转日期函数: from\_unixtime语法:   from\_unixtime(bigint unixtime\, string format\)返回值: string说明: 转化UNIX时间戳(从19700101 00:00:00 UTC到指定时间的秒数)到当前时区的时间格式举例:hive   selec
Easter79 Easter79
3年前
The way of Webpack learning (VI.)
使用commonChunkPlugin的都是基于webpack3.10.0,在webpack4中直接配置optimization就可以了。一:什么是长缓存?浏览器在用户访问页面的时候,为了加快加载速度,对用户请求的静态资源都会进行存储,但是每次代码更新或者升级的时候,我们都需要浏览器去加载新的代码。最方便的方法就是引入新的文件名称,只下载新的
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
哀鸿遍野
哀鸿遍野
Lv1
满衣血泪与尘埃,乱后还乡亦可哀。
文章
5
粉丝
0
获赞
0