依赖预构建与静态资源处理

news2024/11/26 4:21:38

依赖预构建

vite是一个基于浏览器原生ES-Module的前端构建工具。
当你首次启动vite的时候,vite会在本地加载你的站点之前预构建项目依赖。

原因:

  • CommonJS和UMD兼容性:在开发阶段中,Vite的开发服务器将所有的代码视为原生ES模块。因此,Vite必须先将以CommonJS或UMD形式提供的依赖项转换为ES模块。
  • 性能:为了提高后续页面的加载性能,Vite将那些具有许多内部模块的ESM依赖项转换为单个模块。有些包将他们的ES模块构建成许多单独的文件,例如,lodash-es有超过600个内置模块,当我们执行import引入的时候,浏览器会同时发出600多个HTTP请求!大量的请求会导致浏览器端的网络拥堵,使页面加载变得明显缓慢。预构建会将lodash-es预构建为单个模块,现在我们只需要一个HTTP请求。

依赖预构建仅仅适用于开发模式,并使用esbuild将依赖项转换为ES模块。

预构建的内容是什么?

一个项目里,存在很多模块,并不是所有的模块都会被预构建,只有裸依赖(bare import)会执行依赖预构建。

什么是裸依赖呢?
//bare import
import xxx from  "vue"
import xxx from "vue/xxx"
//下面不是
import xxx from "./foo.ts"

用名称去访问的模块是裸依赖,用路径去访问的模块不是
Node.js定义了bare import的寻址机制——在当前目录下的node_modules下寻找
裸依赖一般是npm安装的模块,是第三方模块,不是我们自己写的代码,一般情况下不会被修改,因此对这部分的模块提前构建,有利于提升性能。
相反,如果对开发者写的代码执行预构建,将项目打包成chunk文件,当开发者修改代码时,需要再重新执行构建,在打包成chunk,反而影响性能。

事实上,vite会判断模块的实际路径,是否在node_modules中:

  • 实际路径在node_modules的模块会被预构建,这是第三方模块
  • 实际路径不在node_modules的模块,证明该模块是通过文件链接,连接到node_modules的,是开发者自己写的代码,不执行预构建

缓存

文件系统缓存

vite将预构建的依赖项缓存到node_modules/.vite中。它会基于以下几个来源决定是否需要重新运行预构建步骤:

  • 包管理器的锁文件内容:package.lock.json,yarn.lock等
  • 补丁文件夹的修改时间patch-package
  • vite.config.js中的相关字段
  • NODE_ENV的值

只有上述的其中一项发生改变的时候,才需要重新运行预构建。
如果出于某种原因想要强制重新预构建,可以在启动开发服务器的时候指定 --force选项,或者手动删除node_modules/.vite缓存目录

浏览器缓存

已经预构建的依赖请求使用HTTP进行强缓存,以提高开发期间页面重新加载的性能。一旦被缓存,这些请求将永远不会再次访问开发服务器。

静态资源处理

在vue中,静态资源分为两种:
1.存放在public中的静态资源,这部分资源会被完全的复制,不会经过构建工具处理,可以通过根绝对路径来引用他们。

  • 路径设置时不需要添加public/,默认加载public文件夹下的图片
  • 不需要使用require(当构建工具为webpack的时候,因为webpack使用的是commrnJS规范)
    2.存放在assets目录下,属于代码的一部分,只支持相对路径,会被构建工具打包,并且和样式会被压缩打到一起,可以避免额外的网络请求。
  • 需要使用require(当构建工具为webpack的时候,因为webpack使用的是commrnJS规范)
    vite怎样加载静态资源
    我们主要讨论public目录下的静态资源。
    主要从js、jpg、json、mp4、css五类文件讨论。
    当我们在一个项目中引入这五类资源,并且打印的时候,我们可以看到
    在这里插入图片描述

执行dev命令,我们可以看到,
在这里插入图片描述

所有静态资源都被引入了,但是vite对他们的处理方式并不同,css、js文件被直接输出内部定义的内容,json被转为了对象形式,而url和mp4被输出他们文件的url地址。
当然,我们可以通过一些手段来控制css和js也输出他们的路径。
比如:
1.assetsInclude选项配置
在这里插入图片描述

注意,这个配置里不能写json文件哦,写了要报错的。
2.使用?url后缀,显式的导入一个url
在这里插入图片描述

同样的,我们也能控制img和mp4以原文件输出
3.使用?raw后缀,将文件作为源文件输出
在这里插入图片描述
在这里插入图片描述

这时候jpg和mp4会以流的形式输出。
这个时候要说到另一个文件格式,svg格式,他和图片一样,也会被vite处理输出为url,但是当用?raw后缀的时候,会被直接输出为HTML。

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

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

相关文章

湘大 XTU OJ 1345 素数字符串 题解:欧拉筛法 前缀和 ‘\0‘ sprintf

链接 素数字符串 题目 题目描述 我们将素数从小到大依次书写,可以得到一个字符串"23571113⋯",已知一个数码d(0≤d≤9),求字符串在区间[L,R]之间的多少个d? 输入 第一行是一个整数T(1≤T≤10000),表示样例的个数。 每个样例…

Next.js 13 你需要了解的 8 件事

目录 React 服务器组件 (RSC)服务器组件默认开启在 Next.js 中客户端组件也在服务器上呈现!组成客户端和服务器组件编译Next.js 13 渲染模式桶文件有点坏了库集成:WIP 仍在进行中Route groups 路由组总结 在本文中,我们…

外贸邮箱签名怎么写?改版提升点击率的关键技巧揭秘!

外贸业务常用的一种营销工具就是电子邮件,而电子邮件的签名作为邮件信任度和品牌价值的体现,同样也是非常重要的。那么如何写一份优秀的外贸邮箱签名呢? 下面是几点建议。 第一,突出品牌形象。在签名中加入公司标志或相关图片可以…

【物联网无线通信技术】NFC从理论到实践(FM17XX)

NFC,全称是Near Field Communication,即“近场通信”,也叫“近距离无线通信”。NFC诞生于2004年,是基于RFID非接触式射频识别技术演变而来,由当时的龙头企业NXP(原飞利浦半导体)、诺基亚以及索尼联合发起。NFC采用13.5…

【ElasticSearch】一键安装IK分词器无需其他操作

要注意的时下面命令中的es是我容器的名称,要换成你对应的es容器名 docker exec -it es /bin/bash # 进入容器 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis- ik/releases/download/v7.12.1/elasticsearch-analysis-ik-7.1…

Lookup Singularity

1. 引言 Lookup Singularity概念 由Barry WhiteHat在2022年11月在zkResearch论坛 Lookup Singularity中首次提出: 其主要目的是:让SNARK前端生成仅需做lookup的电路。Barry预测这样有很多好处,特别是对于可审计性 以及 形式化验证&#xff…

Dynamic CRM开发 - 实体字段(一)

字段介绍 Dynamic CRM中,实体是CRM业务数据的基本载体,而字段对于实体同样重要,是其核心部分。 CRM中新增实体后,系统会默认为实体创建一些不可编辑,不可删除的字段,如:主键,创建时…

vue路由及打包部署

vue路由(前端路由):URL中的hash(#号)与组件之间的对应关系。 一、安装vue路由 npm install vue-router3.5.1 二、定义路由表 路由表主要记录hash(#号)与组件之间的对应关系。主要定义在route…

解决SEGGER Embedded Studio无法显示Nordic MCU外设寄存器问题

如果使用SES调试NRF52840的时候发现,官方例程只能显示CPU寄存器,但是无法显示外设寄存器时,解决办法如下: 1.在解决方案右键→Options→Debug→Debugger,然后Target Device选择正确的型号。 2.Register Definition Fil…

RT-Thread 的环形缓冲区 ---- 镜像指示位

可以看一下这篇我写的博客,了解一下大概: RingBuffer 环形缓冲区----镜像指示位_呵呵哒( ̄▽ ̄)"的博客-CSDN博客https://blog.csdn.net/weixin_41987016/article/details/132340883?spm1001.2014.3001.5501 【回顾】缓冲区…

Git的正确使用姿势与最佳实践:团队协作和版本控制的最佳实践

Git是一个版本控制系统,用于跟踪和管理软件开发项目中的代码变更。它可以追踪文件的修改、添加和删除,并记录这些变更的历史。Git可以帮助团队成员协同开发,并提供了一种有效的方式来处理并发编辑和代码合并。 在这篇文章中,我们将…

大数据-玩转数据-Flink

一、说明 在电商网站中,订单的支付作为直接与营销收入挂钩的一环,在业务流程中非常重要。对于订单而言,为了正确控制业务流程,也为了增加用户的支付意愿,网站一般会设置一个支付失效时间,超过一段时间不支…

大数据从入门到放弃——浅谈数据架构的前世今生

文章目录 1. 背景2. 数据的定义及分类2.1 数据的定义2.2 数据的分类2.3 数据和信息的区别 3. 数据的作用4. 数据的那些美好时代4.1 人脑时代4.2 文件时代4.3 数据库时代4.3.1 大服务器时代4.3.2 读写分离时代4.4 数据库的分布式时代4.5 云端时代 5. 数据的未来 1. 背景 随着云时…

excel 核心快捷键用法

1、wps怎样只复制公示计算出来的数据 1.1、按下快捷键“CtrlC”,复制该单元格。 1.2、按下快捷键“ShiftCtrlV”,即“粘贴为数值”,即可只复制数字而不复制该单元格的公式 1.3、wps怎样只复制公示计算出来的数据_百度知道https://zhidao.baid…

【福建事业单位-综合基础知识】05民法典

这里写自定义目录标题 一、民法概述概念原则总结 二、自然人概念总结 三、民事法律行为总结 民法考察2-4题(重点总则篇) 一、民法概述 概念原则 总结 二、自然人 概念 总结 三、民事法律行为 总结

【python】正则表达式

本文介绍正则表达式常用的用法。 有哪些正则字符 正则表达式中有各种各样的正则字符,用于匹配不同情况下的字符串。具体如下: 使用 re 模块进行字符串匹配 比如,我们要从 ‘Xiaoshuaib has 100 bananas’ 中匹配一个数字,可…

Zoho Books的安全性和数据保护:财务信息安全的保障措施揭秘

在信息化时代,如何保障企业信息安全是十分重要的问题,尤其是财务信息。财务管理工具的安全性是否有保障是许多用户担心的问题。 Zoho Books财务管理工具为客户提供了一系列的数据保护和安全措施,以确保客户财务信息的安全。 1. 采用高度加密…

漏洞指北-VluFocus靶场专栏-工具篇

漏洞指北-VluFocus靶场专栏-番外篇奇技淫巧 🌸1、burp suite 、中国蚁剑工具、Strut2扫描软件地址🌸🌸2、burp suite使用🌸step1 浏览器开启代理,**推荐使用:SwitchyOmega** step2 确认浏览器端口和burp su…