vite3+vue3 项目打包优化二 —— 依赖分包策略

news2024/11/20 4:23:48

在没有配置构建工具的分包功能时,构建出来的文件将无比巨大且是独立的一个 js 和 css 文件(如下图),这样本地加载文件时会存在巨大的压力。

在这里插入图片描述

默认情况下,浏览器重复请求相同名称的静态资源时,会直接使用缓存的资源。利用这个机制,我们可以将不经常更新的代码单独打包成一个 JS 文件,这样就可以减少 HTTP 请求,同时降低服务器压力。

Vite 官方文档 -> 构建选项 -> build.rollupOptions中这样描述:自定义底层的 Rollup打包配置。这与从 Rollup 配置文件导出的选项相同,并将与 Vite 的内部 Rollup 选项合并。查看 Rollup 选项文档获取更多细节。也就是说 Vite 底层已经集成了 Rollup 的一部分功能,我们直接配置即可。

我这里的 Rollup 相关配置如下(仅供参考):

rollupOptions: {
  output: { // 静态资源分类打包
    chunkFileNames: 'js/[name]-[hash].js', // 引入文件名的名称
    entryFileNames: 'js/[name]-[hash].js', // 包的入口文件名称
    assetFileNames: '[ext]/[name]-[hash].[ext]', // 资源文件如:字体、图片、样式等
    manualChunks(id) { // 创建自定义的公共 chunk,将静态资源分拆打包:将 node_modules 中的代码单独打包成一个 JS 文件
      if (id.includes('node_modules')) {
        return id.toString().split('node_modules/')[1].split('/')[0].toString();
      }
    }  
  }
}

配置好你的build.output参数,执行命令npm run build我们就可以看目录结构了。

在这里插入图片描述

在这里插入图片描述

output.manualChunks 创建自定义的公共 chunk

  • 当值为对象形式时,每个属性代表一个 chunk,其中包含列出的模块及其所有依赖。chunk 的名称由对象属性的键决定。

    manualChunks({
    	manualChunks: {
    		lodash: ['lodash']
    	}
    })
    
  • 当该选项值为函数形式时,每个被解析的模块都会经过该函数处理。如果函数返回字符串,那么该模块及其所有依赖将被添加到以返回字符串命名的自定义 chunk 中。

    • 以下例子,创建一个命名为 vendor 的 chunk,它包含所有在 node_modules 中的依赖

      manualChunks(id) {
      	if (id.includes('node_modules')) {
      		return 'vendor';
      	}
      }
      
    • 以下例子,将静态资源分拆打包:将 node_modules 中的代码单独打包成一个 JS 文件

      manualChunks(id) {
        if (id.includes('node_modules')) {
          return id.toString().split('node_modules/')[1].split('/')[0].toString();
        }
      }
      

2 output.chunkFileNames 对代码分割中产生的 chunk 自定义命名

  • 值是一个匹配模式,或值是一个函数,对每个 chunk 调用以返回匹配模式。
  • 这种模式支持以下的占位符:
    • [format]:输出(output)选项中定义的格式(format),例如 escjs
    • [hash]:仅基于最终生成的 chunk 内容的哈希值,其中包括 renderChunk 中的转换部分和其依赖文件哈希值。你也可以通过例如 [hash:10] 设置一个特定的哈希值长度。
    • [name]:chunk 的名称。它可以通过 output.manualChunks 选项显示的设置,或者通过插件调用 this.emitFile 设置。否则,它将会根据 chunk 的内容确定。

3 output.entryFileNames 指定 chunks 的入口文件模式、

  • 值是一个匹配模式,或值是一个函数,对每个 chunk 调用以返回匹配模式。
  • 这种模式支持以下的占位符:
    • [format]:输出(output)选项中定义的格式(format),例如 escjs
    • [hash]:仅基于最终生成的入口 chunk 内容的哈希值,其中包括 renderChunk 中的转换部分和其依赖文件哈希值。你也可以通过例如 [hash:10] 设置一个特定的哈希值长度。
    • [name]:入口文件的文件名(不包含扩展名),除非当入口文件为对象时,才用来定义不同的名称。

4 output.assetFileNames 用于自定义构建结果中的静态资源名称

  • 值是一个匹配模式,或值为一个函数,对每个资源调用以返回匹配模式。
  • 这种模式支持以下的占位符:
    • [extname]:包含点的静态资源文件扩展名,例如 .css
    • [ext]:不包含点的文件扩展名,例如 css
    • [hash]:基于静态资源内容的哈希。也可以通过例如 [hash:10] 设置一个特定的哈希值长度
    • [name]:静态资源的名称,不包含扩展名

正斜杠 / 可以用来划分文件到子目录。

[点击查看其它更多 output 相关配置](

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/537040.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux-权限的理解

目录 一、Shell命令以及运行原理 二、Linux权限的概念 三、Linux权限管理 1、文件访问者的分类 2、文件类型和访问权限 3、文件权限值的表示方法 4、文件访问权限的相关设置方法 1)chmod 2)chown 3)chgrp 4)umask 5)file 5、目录的权限 6、粘滞位 7、总结 一、S…

商业银行积极践行双碳战略,浦发信用卡绿色低碳3.0全方位助力双碳经济

易观:“双碳”目标驱动下,高速增长的绿色金融需求将成为银行新增长点,银行机构以“绿色银行”为战略导向,加快绿色业务布局,以低碳生活主题信用卡探索绿色金融发展新模式。浦发银行聚焦绿色金融,以信用卡探…

pix2pix代码

看一下模型图: 首先定义生成器G,和CGAN不同的是,pix2pix并没有输入噪声,而是采用dropout来增加随即性。然后生成器输入x,输出y都是一些图片。最后按照原文,G是一个U-Net shape的,除了上采样和下…

openwrt的openclash提示【更新失败,请确认设备闪存空间足够后再试】

网上搜索了一下,问题应该是出在“无法从网络下载内核更新包”或者“无法识别内核的版本号” 解决办法:手动下载(我是只搞了DEV内核就搞定了TUN和Meta没有动) --> 上传到路由器上 --> 解压缩 --> 回到openclash界面更新配…

技术干货 | 结构光技术及其实现三维成像的主要原理

原创 | 文BFT机器人 3D表面成像的一种主要方法是基于“结构光”的使用 即使用专门设计的二维空间变化强度模式对场景进行主动照明 3D结构光的整个系统包含结构光投影设备、摄像机、图像采集和处理系统。其过程就是投影设备发射光线到被测物体上,摄像机拍摄在被测物体…

Element 格式化表单文本内容

提示&#xff1a;本文效果通用于其它形式文本格式化&#xff0c;此处以 Element 表单为例。 数据库内容 数据存储格式为 text&#xff0c;换行符号 \r\n 前端代码 <el-table-column v-if"columns.visible(changeContent)" prop"changeContent" labe…

线程池的位运算详解

前言 翻阅 Java 线程池的源码&#xff0c;可以看到用到了大量的位运算操作&#xff0c;本文来分析下这些位运算是如何计算的&#xff0c;以及最后算出的结果是什么。 正文 阅读之前&#xff0c;必须熟悉一下内容 & 与运算| 或运算&#xff5e; 取反<< 左移负数的二进…

迪赛智慧数——柱状图(象形标识图):当代职场人心愿清单TOP10

效果图 职场人十大心愿&#xff1a;“脱单”位列第一&#xff0c;“容貌焦虑”成新难题。 除脱单之外&#xff0c;如今职场人的十大心愿就寄托了人类的高质量梦想&#xff0c;比如财务自由、到点下班、提前退休、有房有车…… 不过&#xff0c;让人心疼的是&#xff0c;不少人…

「网安人必看」安全行业主流证书,你知道如何选择吗

现在&#xff0c;越来越多单位为了满足国家安全法律法规的要求&#xff0c;成立独立的网络安全部门&#xff0c;招聘网络安全人才&#xff0c;组建 SRC&#xff08;安全响应中心&#xff09;&#xff0c;为自己的产品、应用、数据保卫护航。短短几年间&#xff0c;网络安全工程…

Goby 漏洞更新 | Weaver e-cology ofsLogin.jsp 用户登陆绕过漏洞

漏洞名称&#xff1a;Weaver e-cology ofsLogin.jsp 用户登陆绕过漏洞 English Name&#xff1a;Weaver e-cology ofsLogin.jsp User Login Bypass Vulnerability CVSS core: 9.3 影响资产数&#xff1a;92980 漏洞描述&#xff1a; 泛微协同管理应用平台&#xff08;e-co…

Python os模块详解

1. 简介 os就是“operating system”的缩写&#xff0c;顾名思义&#xff0c;os模块提供的就是各种 Python 程序与操作系统进行交互的接口。通过使用os模块&#xff0c;一方面可以方便地与操作系统进行交互&#xff0c;另一方面页也可以极大增强代码的可移植性。如果该模块中相…

【SQLserver】sqlserver数据库还原

这里的还原主要是指一个数据备份文件导入到本地 用到的工具&#xff1a; SQLServerManagement Studio18 1、打开本地库&#xff0c;在数据库右键&#xff0c;点击“还原数据库” 2、选择需要还原的文件&#xff0c;这里选设备&#xff0c;后面选择 3、弹窗点击添加按钮&am…

MyBatis中的别名机制

在我们使用MyBatis中的select语句时&#xff0c;需要指定resultType的值&#xff0c;即查询对象的类型&#xff0c;该值是对象的完整类名&#xff0c;看起来非常的繁琐&#xff0c;因此MyBatis中有了别名机制。 使用步骤 在mybatis-config.xml文件中添加< typeAliases >…

Vue--》探索Pinia:Vue状态管理的未来

目录 Pinia的讲解与使用 Pinia的安装与使用 store数据操作 解构store数据 actions-getters的使用 Pinia常用API 持久化插件 Pinia的讲解与使用 Pinia 是由 Eduardo San Martin Morote 创建的&#xff0c;这是一个轻量级的、使用 Vue3 Composition API 的状态管理库。Pi…

谷粒商城二十五springCloud之Sleuth+Zipkin 服务链路追踪

为什么用 分布式系统庞大而复杂&#xff0c;服务众多&#xff0c;调用关系网也非常复杂&#xff0c; 服务上线以后如果出现了某些错误&#xff0c;错误的异常就很难定位。一个请求可能调用了非常多的链路&#xff0c;我们需要知道到底哪一块儿出现了错误。 最终希望有一个链…

Java基础学习(16)多线程

Java基础学习多线程 一、多线程1.1 什么是多线程1.2 多线程的两个概念1.2.1 并发 1.3 多线程的实现方式1.4 多线程的成员方法1.5 线程的生命周期 二、线程安全1.6 同步方法1.7 锁lock1.8 死锁1.8 生产者和消费者 (等待唤醒机制)1.9 等待唤醒机制(阻塞队列方式实现&#xff09;1…

IntelliJ IDEA汉化

IntelliJ IDEA汉化 描述解决办法 描述 在开发过程中&#xff0c;我们想让界面现实为汉语&#xff0c;那么我们就需要对IDEA工具进行汉化&#xff0c;目前版本的IDEA汉化都非常简单&#xff0c;请看下述实现步骤。 解决办法 下述汉化方法&#xff0c;全家桶软件都通用。 打开…

attention机制

油管attention机制解释 油管的attention机制视频。 基础形态 如下图所示&#xff0c;假设现在有4个向量&#xff0c; v 1 v_1 v1​到 v 4 v_4 v4​。我们以 v 3 v_3 v3​为视角&#xff0c;看它是怎么得到 y 3 y_3 y3​的。首先用 v 3 v_3 v3​和全部4个向量做点乘&#xff…

不依赖硬件,可以无限扩展的闹钟组件

在实际的开发项目中&#xff0c;很多时候我们需要定时的做一些事情&#xff0c;举例&#xff1a; ①路上的路灯&#xff0c;每天晚上6:00准时打开&#xff0c;每天早上6:00准时关闭&#xff1b;②定时闹钟&#xff0c;起床上班。这些行为其实都是定时任务–闹钟。 大部分单片机…

【MySql】数据库设计过程

目录 概念数据库设计&#xff1a; 逻辑数据库设计&#xff1a; 物理数据库设计&#xff1a; ->需求分析&#xff08;收集需求和理解需求,“源”&#xff09; ->概念数据库设计&#xff08;建立概念模型:"E-R图/IDEF1X"&#xff09; ->逻辑数据库设计&…