深入了解 Vite 中的手动分包技术

news2024/11/13 1:31:01

之前自己的项目当中,对于分包的概念仅停留在前后端分离以及我做开源项目时,已有的项目进行了分包,包与包之间变量和方法的相互调用等,上线项目也没有特意为分包方案做具体的配置。但在现代前端开发中,提高应用程序的加载性能是一个永恒的追求!而分包(代码分割)技术在这方面提供了强有力的支持。
本博客聚焦于 Vite中的手动分包技术,主要的手动分包方式:静态分包和动态分包。

一。什么是手动分包?

分包是将应用程序的代码拆分成更小、更易管理的块,以便在需要时动态加载。通过减少初始加载时间,我们可以大幅提高应用性能。在 Vite 中,手动分包就是通过配置,明确地指定哪些模块应该分入一个包。

比如说我们对代码进行修改后重新打包,会导致文件指纹发生变化,从而引发一些潜在问题,我们可以把外部引入的模块放在同一个包当中,将开发代码放在一个包当中,这样子修改后重新构建就只会修改开发代码所在的包。

方法一:静态分包

静态分包是一种较为直接的方法,它允许我们在 Vite 的配置中明确地定义每个分包包含的模块。这对于结构相对稳定的项目来说非常有用。

🌰示例

vite.config.js 文件中,可以通过 rollupOptions.output.manualChunks 来实现:

// vite.config.js
export default {
  build: {
    rollupOptions: {
      output: {
        manualChunks: {
          vendor: ['vue'],
          utils: ['./src/utils/module1.js', './src/utils/module2.js']
        }
      }
    }
  }
}
  1. vendor 包:将常用的第三方库(如 vue )打包在一起。这样可以确保这些库只在必要时加载,并且提升了缓存利用率。

  2. utils 包:将应用自定义工具(如 utils 目录中的模块)打包,减少每个页面的初始加载代码。

方法二:动态分包

动态分包提供了一种更为灵活的方法,通过对模块路径的动态判断进行分包,在项目结构复杂或者可能频繁变化时很有用。

🌰例子

动态分包允许我们返回一个函数来处理分包逻辑:

// vite.config.js
export default {
  build: {
    rollupOptions: {
      output: {
        manualChunks: (id) => {
          if (id.includes('node_modules')) {
            return 'vendor';
          }
          if (id.includes('src/utils')) {
            return 'utils';
          }
        }
      }
    }
  }
}
  1. 模块路径判断:通过检查 id (即模块的路径),可以将 node_modules 中的所有模块静态分包到 vendor 中。

  2. 灵活性:假如项目有特殊目录结构,或者有特定命名规范的文件,可以通过函数逻辑处理。

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

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

相关文章

嘉吉连续第七年亮相进博会

以“新质绿动,共赢未来”为主题,嘉吉连续第七年亮相进博会舞台。嘉吉带来了超过120款产品与解决方案,展示嘉吉在农业、食品、金融和工业等领域以客户为中心的创新成果。这些产品融合了嘉吉在相关领域的前瞻性思考,以及对本土市场的…

低代码工作流平台概述-自研

讲解视频可看【【低代码】【企业级】【毕设】一键生成web应用,最强最便捷简单的低代码工作流平台-哔哩哔哩】 【低代码】【企业级】【毕设】一键生成web应用,最强最便捷简单的低代码工作流平台_哔哩哔哩_bilibili 1.在线设计数据库 2.表单设计 3.流程设…

vue3+vite 前端打包不缓存配置

最近遇到前端部署后浏览器得清缓存才能出现最新页面效果得问题 所以…按以下方式配置完打包就没啥问题了,原理很简单就是加个时间戳 /* eslint-disable no-undef */ import {defineConfig, loadEnv} from vite import path from path import createVitePlugins from…

【C++滑动窗口】1297. 子串的最大出现次数|1748

本文涉及的基础知识点 C算法:滑动窗口及双指针总结 固定长度滑动窗口 LeetCode1297. 子串的最大出现次数 给你一个字符串 s ,请你返回满足以下条件且出现次数最大的 任意 子串的出现次数: 子串中不同字母的数目必须小于等于 maxLetters 。…

【Vue】简易博客项目跟做

项目框架搭建 1.使用vue create快速搭建vue项目 2.使用VC Code打开新生成的项目 端口号简单配置 修改vue.config.js文件,内容修改如下 所需库安装 npm install vue-resource --save --no-fund npm install vue-router3 --save --no-fund npm install axios --save …

机器人助力Bridge Champ游戏:1.4.2版本如何提升玩家体验

在Bridge Champ游戏中,机器人扮演着桥牌游戏的“无名英雄”角色,默默地提升玩家体验。凭借智能化的设计,这些机器人不仅能够陪练,也大大提升了比赛的流畅度与趣味性。 Bridge Champ是什么 Bridge Champ是一个基于Ignis公链的在线…

U-Mail反垃圾邮件网关精准拦截各种垃圾病毒邮件

在当今数字化时代,电子邮件已成为企业沟通不可或缺的一部分。然而,其开放性也使得电子邮件系统容易受到垃圾邮件和恶意软件的侵袭。根据最新数据,2024年第二季度,国内企业邮箱用户共收到9.1亿封垃圾邮件,这一数字比上一…

Docker可视化管理面板DPanel的安装

本文软件由网友 rui 推荐; 什么是 DPanel ? DPanel 是一款 Docker 可视化管理面板,旨在简化 Docker 容器、镜像和文件的管理。它提供了一系列功能,使用户能够更轻松地管理和部署 Docker 环境。 软件特点: 可视化管理&…

Java——final用法

一、final 介绍 在Java中,final关键字有多种用途,可以用来修饰变量、方法和类。它的主要作用是确保所修饰的内容不可改变。 二、final 用法 1、修饰变量 1)局部变量 当一个局部变量被声明为final时,它的值在初始化后就不能被…

科技改变生活:最新智能开关、调光器及插座产品亮相

根据QYResearch调研团队的最新力作《欧洲开关、调光器和插座市场报告2023-2029》显示,预计到2029年,欧洲开关、调光器和插座市场的规模将攀升至57.8亿美元,并且在接下来的几年里,将以4.2%的复合年增长率(CAGR&#xff…

走进算法大门---双指针问题(一)

一.双指针算法介绍 概念:双指针是指在遍历数据结构(如数组、链表等)时使用两个指针,通过特定的移动规则来解决问题。这两个指针可以同向移动,也可以相向移动。 同向双指针:常用于解决需要两个位置信息的问…

用 Python 从零开始创建神经网络(一)

用 Python 从零开始创建神经网络(一) 引言1. A Single Neuron:Example 1代码部分: Example 2代码部分: 2. A Layer of Neurons:Example 1代码部分: 引言 本教程专为那些对神经网络已有基础了解…

深度学习⑨GANs

Discriminative and Generative Models Deep learning中主要两种模型 判别模型专注于从输入预测输出,例如分类任务。学习数据点和标签之间的特征 生成模型则试图理解数据是如何产生的,能够生成新的数据样本。理解数据分布和是否可以被预测 Quiz time: Discriminative mo…

[产品管理-58]:安索夫矩阵矩阵帮助创业者确定研发出来的产品在市场中定位策略

目录 一、提出背景 二、核心思想与结构 三、应用背景与领域 四、实践案例 安索夫矩阵(Ansoff Matrix),也被称为产品/市场方格或成长矢量矩阵,其应用背景可以从以下几个方面进行详细阐述: 一、提出背景 安索夫矩阵…

物联网对商业领域的影响

互联网彻底改变了通信方式,并跨越了因地理障碍造成的人与人之间的鸿沟。然而,物联网(IoT)的引入通过使设备能够连接到互联网,改变了设备的功能。想象一下,你的闹钟连接到互联网,并且能够用你的声…

微信小程序——用户隐私保护指引填写(详细版)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

LED点阵显示(Proteus 与Keil uVision联合仿真)(点阵字模提取)

点阵字模提取: https://pan.baidu.com/s/1DZSeLyD_SUkaHRgTm26o-A 提取码: 1111 一、LED点阵显示器结构 点亮点阵中一个发光二极管条件:对应行为高电平,对应列为低电平。如在很短时间内依次点亮很多个发光二极管,LED点阵就可显示…

JDBC学习记录

文章目录 一、JDBC简介1.1、 JDBC概念1.2、 JDBC本质1.3、 JDBC好处 二、JDBC快速入门2.1、 编写代码步骤2.2、 代码示例 三、JDBC API详解3.1、DriverManager3.1.1、注册驱动3.1.2、获取连接 3.2、Connection3.2.1、获取执行对象3.2.2、事务管理 3.3、Statement3.3.1、执行DDL…

[Linux] 进程等待 | 进程替换

🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:青果大战linux 总有光环在陨落,总有新星在闪烁 我有一个朋友&#x…

运用Agent搭建“狼人杀”游戏服务器端!

背景 从23年开年以来,大模型引爆了各行各业。去年比较出圈的是各类文生图的应用,比如Stable Diffusion。网上可以看到各类解释其背后的原理和应用的文章。另外一条平行线,则是文生文的场景。受限于当时LLM(大语言模型&#xff09…