<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      [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文件又默認導出打包后的靜態資源文件路徑。

      image-20240216165942639

      image-20240216170022190

      缺點

      • 打包結果多出許多.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的方法是最優的。

      • 支持動態導入;
      • 保留文件指紋;
      • 不會產生額外的.js文件;
      • 同步代碼。
      posted @ 2024-02-16 17:18  feixianxing  閱讀(882)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲国产美国产综合一区| 国产乱码精品一区二区三| 国产无遮挡又黄又爽免费网站| 蜜臀午夜一区二区在线播放| 国产一区二区在线有码| 国产激情艳情在线看视频| 西西人体大胆444WWW| 国产永久免费高清在线观看| 被黑人巨大一区二区三区| 亚洲真人无码永久在线| 久久碰国产一区二区三区| 思思热在线视频精品| 男人猛戳女人30分钟视频大全| 亚洲精品一二三伦理中文| 国产精品视频全国免费观看| av永久免费网站在线观看| 久久精品国产一区二区三| 国产老熟女一区二区三区| 无码av中文字幕免费放| 国产精品白浆无码流出| 亚洲精品日韩精品久久| 久久精品国产久精国产一老狼 | 玩弄放荡人妻少妇系列| 精品无码av无码专区| 亚洲偷自拍另类一区二区| 丁香五月亚洲综合在线国内自拍| 霸州市| 人人妻人人妻人人片色av| 美女无遮挡免费视频网站| 天天爱天天做天天爽夜夜揉 | 午夜综合网| 亚洲av与日韩av在线| 国产精品一码二码三码| 欧美国产精品不卡在线观看| 4480yy亚洲午夜私人影院剧情| 国产精品视频一区二区不卡| 亚洲人成网站999久久久综合 | 亚洲毛片多多影院| 精品无码成人片一区二区| 熟女人妇 成熟妇女系列视频| 国内精品久久久久电影院|