vite 项目切换不同依赖项的分支,运行加载缓慢问题的解决方案(Pre-bundling dependencies)

news2024/11/24 6:55:50

前言

当我们在首次使用 yarn dev 命令启动 vite 时,或者 切换分支,依赖项发生变化时 会发现项目启动时相当的慢,大概要十几分钟,而且控制台终端打印了如下信息:

Pre-bundling dependencies:

this will be run only when your dependencies or config have changed

在这里插入图片描述

遇到这种情况时,真的是相当恶心,有时候项目启动完成要花费半小时的时间,着实是浪费时间。

其实原因控制台已经提示的很清楚了:

warning package.json: No license field
$ vite
Pre-bundling dependencies: (正在预构建依赖)
  react
  react-dom
  antd
  react-redux
  antd/lib/locale/zh_CN
  (...and 29 more)
(this will be run only when your dependencies or config have changed)(这将只会在你的依赖或配置发生变化时执行)

论学好英语的重要性!!!

知道了问题出在哪里,就能对症下药,问题也会很快妥善解决。

1. 原因:预构建依赖

首先,我们先了解下 vite执行时 为什么要进行 预构建依赖

  1. CommonJS 和 UMD 兼容性: 开发阶段中, Vite 的开发服务器将所有代码视为 ES原生模块。因此,Vite 必须先将作为 CommonJS 或者 UMD 发布的依赖项转换为 ESM.

当转换 CommonJS 依赖时,Vite 会执行智能导入分析,这样即使导出是动态分配的(比如React),按名导入也会符合预期效果。比如:

// 符合预期
import React, { useState } from 'react' 
  1. 性能: Vite 将有许多内部模块的 ESM 依赖关系转换为单个模块,以提高后续页面加载性能。

一些包将它们的 ES 模块构建作为许多单独的文件相互导入。比如: lodash-es 有超过600个内置模块。当我们执行 import { debounce } from lodash-es 时,浏览器同时发出 600 多个 HTTP 请求,尽管服务器在处理这些请求时没有问题,但大量的请求会在浏览器端造成网络拥塞,导致页面的加在速度相当缓慢。

通过 预构建 lodash-es 成为一个模块,我们就只需要一个 HTTP请求即可。

注意:
依赖预构建仅会在开发模式下应用,并会使用 esbuild 将依赖转为 ESM 模块,在生产构建中则会使用 @rollup/plugin-commonjs

在服务器已经启动之后,如果遇到一个新的依赖关系导入,而这个依赖还没有在缓存中,Vite 将重新运行依赖构建进程并重新加载页面。 这就是为什么不同依赖下的分支切换后,项目运行也会变的非常缓慢的原因。

更多详细信息,可以参考 Vite 官网

2. 解决方案

所需依赖包:

  • vite-plugin-optimize-persist
  • vite-plugin-package-config

使用:

npm i -D vite-plugin-optimize-persist vite-plugin-package-config

vite.config.ts 中进行配置:

// vite.config.ts

import OptimizationPersist from 'vite-plugin-optimize-persist'
import PkgConfig from 'vite-plugin-package-config'

export default defineConfig({
	plugins: [
		PkgConfig(),
        OptimizationPersist(),
	]
})

package.json 文件中会自动插入配置代码:

在这里插入图片描述

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

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

相关文章

vivo官网App模块化开发方案-ModularDevTool

作者:vivo 互联网客户端团队- Wang Zhenyu 本文主要讲述了Android客户端模块化开发的痛点及解决方案,详细讲解了方案的实现思路和具体实现方法。 说明:本工具基于vivo互联网客户端团队内部开源的编译管理工具开发。 一、背景 现在客户端的业…

【Jqgrid分页勾选保存】三步实现表格分页勾选(取消勾选)保存(附源码)

目录1、创建临时存储数组,初始化赋值2、单行选中与取消,调整数组3、全选与取消全选,调整数组4、输出数组保存5、片尾彩蛋【写在前面】表格可以说是在我们的web页面中是最常见的,之前我们介绍过layui表格翻页勾选的实现过程&#x…

到2030年,边缘计算潜在市场将增长至4450亿美元!

国际电信咨询公司STL Partners近日出了一份边缘计算关键数据统计,重点介绍了九项边缘计算统计数据,边小缘着手翻译了一下这些数据,这些数据预测显示了边缘计算市场的增长潜力,以及边缘部署数量最多的垂直行业和地区。1.到2030年&a…

java Spring aop入门准备工作

首先 Spring 框架一般都是基于 Aspect]实现 AOP 操作 然后就会带出问题 什么是 Aspect 首先 Aspect并不属于Spring 他是一个单独的AOP框架 离开Spring他也能单独运行 但在Spring开发中 我们常用他来配合Spring完成AOP操作 所以说 我们是要 基于Aspect去配合Spring完成AOP操作…

压力应变电桥信号隔离放大变送器差分输入0-±10mV/0-±20mV转0-20mA/0-10v

概述:DIN11 IPO 压力应变桥信号处理系列隔离放大器是一种将差分输入信号隔离放大、转换成按比例输出的直流信号导轨安装变送模块。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等行业。此系列模块内部嵌入了一个高效微功率的电源,向输入…

ChatGPT入门案例|商务智能对话客服(二)

ChatGPT是人工智能研究实验室OpenAI新推出的一种人工智能技术驱动的自然语言处理工具,使用了Transformer神经网络架构,也是GPT-3.5架构,这是一种用于处理序列数据的模型,拥有语言理解和文本生成能力,尤其是它会通过连接…

day41【代码随想录】动态规划之01背包问题

文章目录前言 01背包一、二维dp数组01背包1.1 确定dp数组以及下标的含义1.2 确定递推公式1.3 初始化1.4 遍历顺序1.5推导dp数组1.6 完整代码二、一维dp数组01背包(滚动数组)2.1 确定dp数组以及下标的含义2.2 确定递推公式2.3 初始化2.4 遍历顺序&#xf…

移动应用开发环境搭建Andriod Studio

文章目录提示:虚拟化的开启零 java环境准备一 下载和安装Android Studio1.1 默认方式安装操作1.2 自定义安装方式1.3 StartService 失败问题解决二 第一个程序2.1 创建一个新项目2.2 下载和创建模拟器2.3 启动模拟器2.4 运行提示:虚拟化的开启 记得提前…

大神之路-起始篇 | 第17章.计算机科学导论之【计算理论】学习笔记

欢迎关注「全栈工程师修炼指南」公众号点击 👇 下方卡片 即可关注我哟!设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习!涉及 企业运维、网络安全、应用开发、物联网、人工智能、大数据 学习知识“ 花开堪折直须折,莫待无花空折…

2023年浙江水利水电施工安全员精选真题题库及答案

百分百题库提供水利水电施工安全员考试试题、水利水电施工安全员考试预测题、水利水电施工安全员考试真题、水利水电施工安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 119.下列关于大模板按照的说法正确的是&#x…

#459 津津有味:北方人对饺子的痴迷可能是刻进骨子里的

点击文末“阅读原文”即可收听本期节目剪辑、音频 / 卷圈 编辑 / SandLiu 卷圈 监制 / 姝琦 文案 / 粒粒 产品统筹 / bobo 录音间 / 声湃轩活着不端饺子碗,哭天抹泪没人管。你一定见识过铺天盖地的对“北方人一过节就吃饺子”的调侃。但饺子就是很好吃这件事&am…

ARM uboot 源码分析4 -启动第二阶段

一、start_armboot 函数简介 1、一个很长的函数 (1) 这个函数在 uboot/lib_arm/board.c 的第 444 行开始到 908 行结束。 (2) 450 行还不是全部,因为里面还调用了别的函数。 (3)为什么这么长的函数,怎么不分成两三个函数?主要因为这个函数…

100种思维模型之非sr思维模型-012

什么是sr? sr是stimulus-response的缩写,意思是刺激反应。 那么非sr思维模型就是非刺激反应思维模型的意思。 今天我们来聊聊非sr思维模型——一个提醒我们思考,提醒我们任何时刻都有选择权的思维模型。 本文依然从三个方面进行介绍,何谓…

你是真的“C”——详解结构体知识点

你是真的“C”——详解结构体知识点😎前言🙌什么是结构体?🙌1. 结构体的声明🙌1.1 结构的基础知识1.2 结构的声明1.3 结构成员的类型1.4 结构体变量的定义和初始化2. 结构体成员的访问🙌3结构体传参&#x…

推荐领域新人必看书籍:《推荐系统实践》

这本书非常适合推荐领域的新手,因为这本书的主要目的更接近于科普,而不是描述具体的推荐算法。什么是推荐系统?如果有一位你喜欢的女士约你一起外出,肯定不需要别人推荐你是否赴约吧!(信息量太小则不需要被…

VS Code中的GIT操作

一、前言 我们在进行项目开发时都免不了与GIT打交道,但是面对各种的难记的GIT命令总是手足无措;还好编译器中内置了GIT的仓库的一系列操作,掌握了可视化的操作就不用担心记不住GIT命令符了。下面主要介绍VS Code中具体的操作: 二…

【安全】Nginx实现反向代理负载均衡

基础概念 什么是负载均衡? 负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求;即把请求均匀的分摊给上游的应用服务器。最基本的配置方式便是轮询: 负载均衡策略 策略 轮询 根据请求顺序分配 weight …

【软件工程】COMP5241 SE课程笔记

Software EngineeringCourse1 IntroductionCloud Native AppsScheduleSoftware InstallProject Chaos ReportWhat is Software EngineeringHow to define a good AppsSteps of SoftwareCourse4本笔记记录始于2023年2月13日,为在读研究生期间COMP5241 SE课程笔记整合…

检测脸部情绪有多难?10行代码就可以搞定!

引言面部表情展示人类内心的情感。它们帮助我们识别一个人是愤怒、悲伤、快乐还是正常。医学研究人员也使用面部情绪来检测和了解一个人的心理健康。人工智能在识别一个人的情绪方面可以发挥很大的作用。在卷积神经网络的帮助下,我们可以根据一个人的图像或实时视频…

封装、继承、多态、上下转型、静态绑定、动态绑定、PO/Bean/Vo/Do/Dto,dljd reyco郭

封装 “封装”这个概念,由两部分构成:一部分是封,一部分是装。“封装”这个动作,顺序应该是先装后封。 装:原本name、age、score是3个不同的、离散的数据,它们之间是有关系的是,都是用来描述一个…