[Vite] 静态资源的动态访问

这篇具有很好参考价值的文章主要介绍了[Vite] 静态资源的动态访问。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

这篇笔记是对渡一教育网课的知识点总结,源视频👉 静态资源的动态访问【渡一教育】 。

静态资源与打包规则

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

文件指纹的作用:

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

动态访问静态资源

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

如下情景属于对静态资源的动态访问,也就是说使用了插值语法,而变量值只有在代码执行中才被确定:

  • css中的background-image: url()使用v-bind动态地绑定一张图片的路径;
  • template中节点的style,在background-image:url()使用插值语法;
  • 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(...){
		...
    }
}
<img :src="imgName" />

将所有可能用到的图片都导入,并配合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文件又默认导出打包后的静态资源文件路径。

缺点

  • 打包结果多出许多.js文件;
  • 异步导入。

方法四:URL构造函数

使用计算属性computedURL

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

URL传入两个参数:1. 文件路径;2. 基准路径。

返回URL实例对象的pathname属性,即是打包后的文件路径。

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

原理

单文件组件在进行打包的时候,会分析以下内容:

  1. <img>标签的src属性;
  2. cssbackground-image属性的url()函数;

1和2:如果是静态的,则会进行路径转换。

  1. import()
  2. new URL();

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

总结

以上的方法中,使用URL的方法是最优的。文章来源地址https://www.toymoban.com/news/detail-825150.html

  • 支持动态导入;
  • 保留文件指纹;
  • 不会产生额外的.js文件;
  • 同步代码。

到了这里,关于[Vite] 静态资源的动态访问的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vite动态资源引入

    上述写法本地能够正常访问图片,但是打包之后无法正常访问,将 boxHerf 换成下列写法即可解决 注意:new URL(url,import.meta.url) 中的参数 url ,不能如下面定义变量拼接 上述开发没问题,但是打包会报错,不支持 import.meta.url new URL() 创建一个新 URL 对象的语法:new URL(url, [base])

    2024年02月05日
    浏览(59)
  • SpringBoot访问静态资源和jar外部静态资源,部署前端打包后的vue项目放入静态资源里

    记录一下使用SpringBoot访问静态资源和SpringBoot打包之后的jar外部静态资源,在开发的时候,一般选择前后端分离的方式,前端使用vue 后端使用SpringBoot,通常情况下,部署都是前端通过http去请求后端资源,涉及到http请求,那么肯定需要资源的目标地址IP,一般云端部署给到I

    2024年02月09日
    浏览(75)
  • 记录使用nginx部署静态资源流程,以及遇到的访问静态资源404问题

    将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署实现 动静分离 ,提高用户访问静态代码的速度,降低对后台应用访问,减轻后台服务器的压力。 这里我选择放在了 html文件夹 下,(也可以放在和html文件夹同级,或其它位置 打开 conf文件夹 打开总配置文

    2024年02月08日
    浏览(64)
  • nginx访问静态资源

    nginx访问静态资源 打开nginx配置文件 只需修改成或者添加一个location,就可以访问 html路径下所有文件了 如果只需要访问html特定文件夹内容,需要指定 效果

    2024年02月13日
    浏览(42)
  • Nginx访问静态资源配置

    关于 alias和root配置的说明: 一般情况下,在nginx配置中的良好习惯是: 1)在location /中,即路径为“ / ”时, 配置root目录; 2)在location /path中,即路径包含指定内容,如“ localtion /imgs ”时, 配置alias虚拟目录。

    2024年02月09日
    浏览(42)
  • 补充前端访问静态资源的一个错误

    注意,前端访问时带上本地服务端的host,例如http://localhost:8080, 后端改写的代码如下,注意file后面一定是三个‘/’,不然的化虽然能解析,但访问不到。 错误来源https://mp.csdn.net/mp_blog/creation/editor/135489062 错误内容已改正。 

    2024年01月21日
    浏览(64)
  • Springboot设置并访问静态资源目录

    目录 ​​​​​​​ 静态文件 application设置方法 配置详解 编写配置 优缺点 设置配置类方法 配置详解 编写配置 优缺点 总结         静态资源,一般是网页端的: HTML文件、JavaScript文件和图片 。尤其是 设置图片的静态资源 ,尤其重要: 这样的静态资源访问不会被Sp

    2024年02月15日
    浏览(66)
  • C#WPF动态资源和静态资源应用实例

    本文实例演示C#WPF动态资源和静态资源应用 静态资源(StaticResource)指的是在程序载入内存时对资源的一次性使用,之后就不再访问这个资源了。 动态资源(DynamicResource)指的是在程序运行过程中然会去访问资源。 WPF中,每个界面元素都含有一个名为Resources的属性,其存储的是以

    2024年02月07日
    浏览(37)
  • Minio + Nginx 实现静态资源对外访问

            公司交付项目,文件服务java + minio实现文件基本功能。其中包含文件上传与下载与在线预览,由于文件下载功能实现方式问题(web直接调用文件预览接口,有minio直接返回可预览路径二次请求实现文件下载)。         在公司局域网内没有问题,到客户环境文件无法

    2024年02月08日
    浏览(57)
  • SpringBoot代理访问本地静态资源400 404

    问题:访问过程中可能会出现400、404问题 前提:保证有文件,并且文件路径正确 SpringBoot如何配置静态资源代理,大家可以网上找一找,或者也可以参考我的另一篇博客 SpringBoot addResourceHandlers 代理静态资源 1、路径纯英文 此种情况目前没有遇到过问题 2、路径包含中文 此种

    2024年02月12日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包