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

相关文章

MobaXterm远程登录工具功能与应用小结

《MobaXterm远程登录工具功能与应用小结》MobaXterm是一款功能强大的远程终端软件,主要支持SSH登录,拥有多种远程协议,实现跨平台访问,它包括多会话管理、本地命令行执行、图形化界面集成和... 目录1. 远程终端软件概述1.1 远程终端软件的定义与用途1.2 远程终端软件的关键特性2. 支持的

Python利用自带模块实现屏幕像素高效操作

《Python利用自带模块实现屏幕像素高效操作》这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、获取屏幕放缩比例2、获取屏幕指定坐标处像素颜色3、一个简单的使用案例4、总结1、获取屏幕放缩比例from

nginx-rtmp-module模块实现视频点播的示例代码

《nginx-rtmp-module模块实现视频点播的示例代码》本文主要介绍了nginx-rtmp-module模块实现视频点播,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录预置条件Nginx点播基本配置点播远程文件指定多个播放位置参考预置条件配置点播服务器 192.

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或

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

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