vue3+vite assets動態(tài)引入圖片的幾種方式,解決打包后圖片路徑錯誤不顯示的問題

vite 官方默認(rèn)的配置,如果資源文件在assets文件夾打包后會把圖片名加上 hash值,但是直接通過 :src="imgSrc"方式引入并不會在打包的時候解析,導(dǎo)致開發(fā)環(huán)境可以正常引入,打包后卻不能顯示的問題

這里我們先看看vite官方文檔的解釋:
https://vitejs.bootcss.com/guide/assets.html

我們看到實際上我們不希望資源文件被wbpack編譯可以把圖片放到public 目錄會更省事,不管是開發(fā)環(huán)境還是生產(chǎn)環(huán)境,可以始終以根目錄保持圖片路徑的一致,這點跟webpack是一致的

image.png

看到這里,也許問題就解決了,如果在vite確實需要將靜態(tài)文件放在assets,我們再往下看:

這里我們先假設(shè):
靜態(tài)文件目錄:src/assets/images/
我們的目標(biāo)靜態(tài)文件在 src/assets/images/home/home_icon.png

<img :src="require('@/assets/images/home/home_icon.png')" />

嘗試過require動態(tài)引入, 發(fā)現(xiàn)報錯:require is not defind,這是因為 require 是屬于 Webpack 的方法

第一種方式(適用于處理單個鏈接的資源文件)

import homeIcon from '@/assets/images/home/home_icon.png'

<img :src="homeIcon" />

第二種方式(適用于處理多個鏈接的資源文件)

推薦,這種方式傳入的變量可以動態(tài)傳入文件路徑?。?/p>

靜態(tài)資源處理 | Vite 官方中文文檔
new URL() + import.meta.url

這里我們假設(shè):
工具文件目錄: src/util/pub-use.ts
pub-use.ts

// 獲取assets靜態(tài)資源
export default  const getAssetsFile = (url: string) => {
   return new URL(`../assets/images/${url}`, import.meta.url).href
}

使用

import usePub from '@/util/public-use'
setup () {
  const Pub = usePub()
  const getAssetsFile = Pub.getAssetsFile
  return { getAssetsFile }
}

可以包含文件路徑

<img :src="getAssetsFile('/home/home_icon.png')" />

第三種方式(適用于處理多個鏈接的資源文件)

不推薦,這種方式引入的文件必須指定到具體文件夾路徑,傳入的變量中只能為文件名,不能包含文件路徑

使用vite的import.meta.glob或import.meta.globEager,兩者的區(qū)別是前者懶加載資源,后者直接引入。

這里我們假設(shè):
工具文件目錄: src/util/pub-use.ts
pub-use.ts

// 獲取assets靜態(tài)資源
export default const getAssetsHomeFile = (url: string) => {
    const path = `../assets/images/home/${url}`;
    const modules = import.meta.globEager("../assets/images/home/*");
    return modules[path].default;
}

使用

import usePub from '@/util/public-use'
setup () {
  const Pub = usePub()
  const getAssetsFile = Pub.getAssetsFile
  return { getAssetsFile }
}

不能包含文件路徑

<img :src="getAssetsHomeFile('home_icon.png')" />
補充:如果是背景圖片引入的方式(一定要使用相對路徑)
.imgText {
  background-image: url('../../assets/images/1462466500644.jpg');
}

生產(chǎn)環(huán)境會自動加上hash,并且路徑正確


image.png

以下錯誤用法,使用絕對路徑在開發(fā)環(huán)境能夠正常顯示,但將導(dǎo)致打包后的路徑不正確

.imgText {
  background-image: url('src/assets/images/1462466500644.jpg');
}

生產(chǎn)環(huán)境資源404:


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容