webpack--关于CommonsChunkPlugin拆分模块的应用

2023-12-27 05:32

本文主要是介绍webpack--关于CommonsChunkPlugin拆分模块的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

官网介绍:http://www.css88.com/doc/webpack2/plugins/commons-chunk-plugin/

生成的js文件见:https://github.com/ChpShy/single-play-demo/tree/master/CommonsChunkPlugin

关于minChunks的介绍:

https://segmentfault.com/q/1010000008726439/revision,

https://segmentfault.com/q/1010000009070061/a-1020000009073036

一、介绍

CommonsChunkPlugin 插件,是一个可选的用于建立一个独立文件(又称作 chunk)的功能,这个文件包括多个入口 chunk 的公共模块。通过将公共模块拆出来,最终合成的文件能够在最开始的时候加载一次,便存起来到缓存中供后续使用。这个带来速度上的提升,因为浏览器会迅速将公共的代码从缓存中取出来,而不是每次访问一个新页面时,再去加载一个更大的文件。

以上是官网的介绍,其实CommonsChunkPlugin又什么好处呢,简单来说,webpack编译,如果文件内容有改动,生成的编译文件的hash值是会变的,即生成的文件名就不一样了(前提是将hash放入了文件名当中),那么浏览器就会重新请求该资源。不使用CommonsChunkPlugin拆分模块,会把项目中的依赖打进app.js当中,如jqury.js等,会导致如果只是改了项目中的一个小地方,浏览器就得把所有内容都重新加载一遍,是很耗资源的,而如果我们把jquery拆分到一个独立的js(vendor.js)中,那么只要这个js中的内容不变,浏览器就不会重新请求,是不是很棒棒、、、

二、参数解释

1. name: 提取出来的公共chunk的名字

2. filename: 生成公共文件的文件名,如果不配置,默认的output里面的filename

3. minChunks:  number|Infinity|function(module, count) -> boolean,三种选择,

number:代表模块至少被调用定义的次数才会被放到公共模块当中;(默认为chunks的数量)

Infinity: 生成的公共文件只包含webpack运行代码,不会包含其他的模块

function:设置特定的模块,webpack会遍历工程的所有模块调用改函数,并作为module入参传入,

只要匹配(return true),该模块就会被编译进该公共js中

4. chunks:用于从公共模块当中再进行抽取。如vue工程配置由app.js,vendor.js,manifest.js,

最后的manifest.js就是将vendor里面的webpack运行代码和动态生成script节点的代码提取了出来。

三、场景及总结

1. 不使用CommonsChunkPlugin生成的js文件(289K):


这个没什么总结的,jquery编译在了app.js。

2. 在entry定义chunk:


如果不定义filename,生成的名字由output里面的filename决定。

生成的js(忽略中间的图片):


可以看出,app里面只有21K了,vendor里面272K

3. 在CommonsChunkPlugin定义chunk,并且只分离jquery:



编译结果,和2相同:


4. CommonsChunkPlugin定义chunk,并且选中node_modules目录:


编译结果:


app.js小了,vendor.js大了,是因为把除了jquery之外,把css和style的方法也放进了vendor.js



总结:以上并没有做公共模块的二次提取,会导致如果app.js的hash变了,vendor里面有一段生成script插入到html当中的代码也会改变,从而vendor改变,所以应该生成3个文件,app.js: 工程代码。vendor.js,依赖的模块代码。manifest.js,webpack运行代码。

这篇关于webpack--关于CommonsChunkPlugin拆分模块的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/542020

相关文章

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

java中VO PO DTO POJO BO DO对象的应用场景及使用方式

《java中VOPODTOPOJOBODO对象的应用场景及使用方式》文章介绍了Java开发中常用的几种对象类型及其应用场景,包括VO、PO、DTO、POJO、BO和DO等,并通过示例说明了它... 目录Java中VO PO DTO POJO BO DO对象的应用VO (View Object) - 视图对象

Go信号处理如何优雅地关闭你的应用

《Go信号处理如何优雅地关闭你的应用》Go中的优雅关闭机制使得在应用程序接收到终止信号时,能够进行平滑的资源清理,通过使用context来管理goroutine的生命周期,结合signal... 目录1. 什么是信号处理?2. 如何优雅地关闭 Go 应用?3. 代码实现3.1 基本的信号捕获和优雅关闭3.2

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

Python模块导入的几种方法实现

《Python模块导入的几种方法实现》本文主要介绍了Python模块导入的几种方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录一、什么是模块?二、模块导入的基本方法1. 使用import整个模块2.使用from ... i

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,