參考
http://www.reibang.com/p/ddfb5a8b458b
為防止之后找不到文章 全部復(fù)制如下
vite 官方默認的配置,如果資源文件在assets文件夾打包后會把圖片名加上 hash值炕舵,但是直接通過 :src="imgSrc"方式引入并不會在打包的時候解析豪娜,導(dǎo)致開發(fā)環(huán)境可以正常引入,打包后卻不能顯示的問題
看到這里棚蓄,也許問題就解決了堕扶,如果在vite確實需要將靜態(tài)文件放在assets碍脏,我們再往下看:
這里我們先假設(shè):
靜態(tài)文件目錄:src/assets/images/
我們的目標靜態(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" />
<meta charset="utf-8">
第二種方式(適用于處理多個鏈接的資源文件)
推薦典尾,這種方式傳入的變量可以動態(tài)傳入文件路徑!邪蛔!
靜態(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 getAssetsHomeFile = Pub.getAssetsHomeFile
return { getAssetsHomeFile }
}
不能包含文件路徑
<img :src="getAssetsHomeFile('home_icon.png')" />
補充:如果是背景圖片引入的方式(一定要使用相對路徑)
.imgText {
background-image: url('../../assets/images/1462466500644.jpg');
}
生產(chǎn)環(huán)境會自動加上hash,并且路徑正確
以下錯誤用法污抬,使用絕對路徑在開發(fā)環(huán)境能夠正常顯示汞贸,但將導(dǎo)致打包后的路徑不正確
.imgText {
background-image: url('src/assets/images/1462466500644.jpg');
}
生產(chǎn)環(huán)境資源404: