当前位置: 首页 > news >正文

web前端之vue动态访问静态资源、静态资源的动态访问、打包、public、import、URL、Vite

MENU

  • 静态资源与打包规则
  • 动态访问静态资源
  • 直接导入
  • 将静态资存放在public目录中
  • 动态导入
  • URL构造函数
  • 结束语
  • 实践与坑
  • 附文


静态资源与打包规则

介绍
Vite脚手架在打包代码的时候,会把源代码里对于静态资源的访问路径转换为打包后静态资源文件的路径。主要的区别是文件指纹,即打包后的文件会带上一个hash值,用于区分不同版本的文件。


文件指纹的作用
当前端项目更新之后,重新打包、部署,由于文件指纹的存在,客户端检测到文件名不同,则会下载新版的文件。如果没有文件指纹,且新旧版文件名一致,客户端会读缓存,而不能及时地拿到新版文件。


动态访问静态资源

动态访问静态资源通常导致读取不到文件,因为源代码中使用的路径是src,而打包之后静态资源带上了文件指纹,代码中的路径却没有随之改变。


如下情景属于对静态资源的动态访问,也就是说使用了插值语法,而变量值只有在代码执行中才被确定。
1、css中的background-image: url();使用v-bind动态地绑定一张图片的路径;
2、template中节点的style,在background-image:url();使用插值语法;
3、img节点的src属性使用动态绑定传递图片路径。


直接导入

import img1 from './assets/1.jpg';
import img2 from './assets/2.jpg';const imgName = ref('');function handleChange(val){if(val === 1) {imgName.value = img1;} else if(val === 2) {imgName.value = img2;}
}

将所有可能用到的图片都导入,并配合if语句实现动态切换。
缺点是代码臃肿,难以维护。


将静态资存放在public目录中

存储在public目录的静态资源文件会原封不动地被打包到dist文件夹中,不用担心文件名发生变化,在源代码中直接使用绝对路径访问静态资源即可:/assets/1.jpg。
缺点是失去了文件指纹带来的好处,后期如果静态资源被替换了,但是文件名没变,客户端仍读取缓存,无法及时获取最新版的静态资源。


动态导入

const imgName = ref('');
const url = ref('');watchEffect(async () => {const module = await import('./assets/${imgName.value}.jpg');console.log(module);
});

Vite脚手架在静态分析代码的时候,读取到动态导入import(),且内部是模板字符串,只有一部分内容是动态的,那么Vite会自动将符合./assets/*.jpg路径格式的静态资源全部进行打包。
在打包的时候,不仅会打包所有符合情况的静态资源,还会打包出对应的.js文件。import()语句实际上是导入.js文件,而.js文件又默认导出打包后的静态资源文件路径。


asseset1
asseset2


缺点是打包结果多出许多.js文件和异步导入。


URL构造函数

使用计算属性computed和URL。

const url = computed(()=>{const obj = new URL(`./assets/${imgName.value}.jpg`, import.meta.url);return obj.pathname;
});

URL传入两个参数:文件路径和基准路径。
返回URL实例对象的pathname属性,即是打包后的文件路径。

<div :style="{backgroundImage: url(url)}"></div>

原理
单文件组件在进行打包的时候,会分析内容。


img元素和url函数
1、<img>标签的src属性;
2、css的background-image属性的url()函数;
如果是静态的,则会进行路径转换。


import()和new URL()
只能是某一个部分是动态,通常是模板字符串。这种情况下会把指定文件夹下面的指定格式的文件全部打包,并进行路径转换。import()会生成额外的.js文件,new URL()不会。


结束语

以上的方法中,使用URL的方法最优。
支持动态导入;
保留文件指纹;
不会产生额外的.js文件;
同步代码。


实践与坑

待更新…


附文

待更新…

相关文章:

web前端之vue动态访问静态资源、静态资源的动态访问、打包、public、import、URL、Vite

MENU 静态资源与打包规则动态访问静态资源直接导入将静态资存放在public目录中动态导入URL构造函数结束语实践与坑附文 静态资源与打包规则 介绍 Vite脚手架在打包代码的时候&#xff0c;会把源代码里对于静态资源的访问路径转换为打包后静态资源文件的路径。主要的区别是文件指…...

Raven2掠夺者2渡鸦2角色创建、游戏预下载、账号怎么注册教程

《渡鸦2》&#xff08;Raven 2&#xff09;是由韩国开发的一款大型多人在线角色扮演游戏&#xff08;MMORPG&#xff09;类型的手游&#xff0c;作为前作《Raven》的续集&#xff0c;继承并发展了其黑暗奇幻世界观&#xff0c;同时在游戏设计和内容上进行了大量创新。游戏预计于…...

Window VScode配置Conda教程(成功版)

VScode配置Conda 参考博文&#xff1a;https://blog.csdn.net/qq_51831335/article/details/126757014Anaconda安装&#xff08;注意勾选自动配置环境变量&#xff01;&#xff09; 官网&#xff1a;https://www.anaconda.com/download/success VScode配置 python插件安装安装 …...

探索旅行的优惠之选,千益畅行旅游卡让旅程更省心省力!

在旅行的道路上&#xff0c;一张旅游卡往往能为您带来意想不到的便利与优惠。那么&#xff0c;对于千益畅行旅游卡&#xff0c;您是否好奇如何轻松拥有它呢&#xff1f; 首先&#xff0c;千益畅行旅游卡作为旅行者的贴心伴侣&#xff0c;为您提供了多样化的获取渠道。您可以通…...

JVM学习-彻底搞懂Java自增++

从字节码角度分析i和i的区别 public void method6() {int i 10;i; //在局部变量表上直接加1}public void method7() {int i 10;i; //字节码同i}public void method8() {int i 10;int a i; //通过下图可以看出先将局部变量表中的值push到操作数栈&#xff0c;然…...

【全开源】民宿酒店预订管理系统(ThinkPHP+uniapp+uView)

民宿酒店预订管理系统 特色功能&#xff1a; 客户管理&#xff1a;该功能可以帮助民宿管理者更加有效地管理客户信息&#xff0c;包括客户的姓名、电话、地址、身份证号码等&#xff0c;并可以在客户的订单中了解客户的消费情况&#xff0c;从而更好地满足客户的需求&#xff…...

9.3 Go语言入门(变量声明和函数调用)

Go语言入门&#xff08;变量声明和函数调用&#xff09; 目录二、变量声明和函数调用1. 变量声明1.1 使用 var 关键字声明1.2 简短声明1.3 零值1.4 常量 2. 函数调用2.1 函数定义2.2 多个返回值2.3 命名返回值2.4 可变参数2.5 匿名函数和闭包 目录 Go 语言&#xff08;Golang&a…...

CVE-2020-7982 OpenWrt 远程命令执行漏洞学习(更新中)

OpenWrt是一款应用于嵌入式设备如路由器等的Linux操作系统。类似于kali等linux系统中的apt-get等&#xff0c;该系统中下载应用使用的是opgk工具&#xff0c;其通过非加密的HTTP连接来下载应用。但是其下载的应用使用了SHA256sum哈希值来进行检验&#xff0c;所以将下载到的数据…...

代码随想录——左叶子之和(Leetcode404)

题目链接 BFS 队列 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right)…...

解禁谷歌等浏览器禁止网站使用麦克等媒体设备

1、浏览器地址栏输入chrome://flags/ 微软的chromium内核的edge浏览器&#xff0c;既可以输入&#xff1a;chrome://flags/ &#xff0c;也可以输入edge://flags/ 2、打开后&#xff0c;界面如下 3、输入搜索&#xff0c;unsafe&#xff0c;并启用、输入需要启用的网址...

如何彻底卸载sql sever2022

目录 背景过程1、关闭sql sever服务2、打开控制面板&#xff0c;卸载SQL Sever3、手动删除 SQL Server 遗留文件4、清空注册表5、重启计算机以确保所有更改生效。 总结 背景 重装了电脑&#xff0c;安装sqlServer&#xff0c;一直报错&#xff0c;不成功&#xff0c;所以每次安…...

「51媒体」如何与媒体建立良好关系?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 与媒体建立良好关系对于企业或个人来说都是一项重要的公关活动。 了解媒体&#xff1a;研究媒体和记者的兴趣&#xff0c;提供相关且有价值的信息。 建立联系&#xff1a;通过专业的方式…...

Selenium 库的爬虫实现

Selenium 是什么&#xff1f; Selenium 是一个用于自动化 Web 应用程序测试的工具。它提供了一个用于测试网站的框架&#xff0c;可以模拟用户在浏览器中的操作&#xff0c;如点击链接、填写表单、提交数据等。Selenium 可以在多种浏览器和操作系统上运行&#xff0c;并且支持…...

【文末附gpt升级方案】数据虚拟化技术的优势

数据虚拟化技术的优势主要体现在以下几个方面&#xff1a; 提高资源利用率和降低成本&#xff1a; 数据虚拟化可以显著减少物理硬件的需求&#xff0c;从而降低硬件成本。通过虚拟化&#xff0c;企业可以利用数据中心提供的规模经济优势&#xff0c;使用更少的服务器来完成相同…...

C++ 常量和变量

1 常量 具体把数据写出来 2,3&#xff0c;4&#xff1b;1.2 1.3;“Hello world!”,“C” cout<<2015 常量&#xff1a;不能改变的量。 字面常量&#xff08;字面量、直接常量&#xff09;:直接写出的数据。 符号常量&#xff1a;用符号表示数据&#xff0c;但它一旦确定…...

【cocos creator 】生成六边形地图

想要生成一个六边形组成的地图 完整代码示例 以下是完整的代码示例&#xff0c;包含了注释来解释每一步&#xff1a; cc.Class({extends: cc.Component,properties: {hexPrefab: {default: null,type: cc.Prefab},mapWidth: 10, // 网格的宽度&#xff08;六边形的数量&am…...

TypeScript类型体操练习

历史小剧场 这个世界上&#xff0c;有两种人最痛苦&#xff0c;第一种是身居高位者&#xff0c;第二种是身居底层者&#xff0c;第一种人很少&#xff0c;第二种人很多。第一种人叫崇祯&#xff0c;第二种人叫百姓。 而最幸福的&#xff0c;就是中间那拨人&#xff0c;主要工作…...

leetcode231-Power of Two

题目 给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2x &#xff0c;则认为 n 是 2 的幂次方。 示例 1&#xff1a; 输入&#xff1a;n 1 输出&#xff1…...

贪心算法简单介绍

贪心算法是一种在每一步选择中都采取当前状态下最优或最优近似的选择&#xff0c;以期望最终得到全局最优解的算法。贪心算法并不总能得到全局最优解&#xff0c;但在某些问题上&#xff0c;它可以得到全局最优解&#xff0c;并且比动态规划等其他方法更为简单和高效。 贪心算…...

眼底项目经验

眼底项目经验 可解释性不足问题眼底项目有多牛逼可解释性不足解法数据、算力、算法都免费送不仅预测当下&#xff0c;还能预测未来和慢病管理整合&#xff0c;形成一个实时健康检测生态 可解释性不足问题 今天下午和腾讯眼底项目人员讨论, 他们不准备做全身性的多疾种, 因为深…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型&#xff08;算法、数据分析、机器学习等&#xff09;不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...