vue2.0 資源文件assets和static的區(qū)別詳解
資源文件處理
在我們的項(xiàng)目結(jié)構(gòu)里,有兩個(gè)資源文件的路徑,分別是:src/assets 和 static/。那這兩個(gè)到底有什么區(qū)別呢?
Webpacked 資源
為了回答這個(gè)問題,我們首先需要理解webpack是怎樣處理靜態(tài)資源的。在*.vue組件中,所有的templates和css都會(huì)被vue-html-loader 和 css-loader解析,尋找資源的URL。
舉個(gè)例子,在 <img src="./logo.png"> 和 background: url(./logo.png), “./logo.png”中,都是相對(duì)資源路徑,都會(huì)被Webpack解析成模塊依賴 。
由于logo.png不是JavaScript,當(dāng)被看成一個(gè)模塊依賴的時(shí)候,我們需要使用url-loader 和 file-loader進(jìn)行處理。 該模板已經(jīng)配置好了這些loaders,所以你能夠使用相對(duì)/模塊路徑時(shí)不需要擔(dān)心部署的問題。由于這些資源可能在構(gòu)建的時(shí)候被內(nèi)聯(lián)/復(fù)制/重命名, 所以它們從本質(zhì)上來說是你源碼的一部分。這就是為什么我們建議將交由webpack處理的靜態(tài)資源和其它源文件一樣放在/src路徑下面。實(shí)際上,你甚至不需要把它們?nèi)挤旁?src/assets路徑下:你可以基于模塊/組件的使用來組織文件結(jié)構(gòu)。例如,你可以把每個(gè)組件和屬于它的靜態(tài)資源放在它自己的目錄下。
資源處理規(guī)則
相對(duì)URL, e.g. ./assets/logo.png 將會(huì)被解釋成一個(gè)模塊依賴。它們會(huì)被一個(gè)基于你的Webpack輸出配置自動(dòng)生成的URL替代。沒有前綴的URL, e.g. assets/logo.png 將會(huì)被看成相對(duì)URL,并且轉(zhuǎn)換成./assets/logo.png
前綴帶~的URL 會(huì)被當(dāng)成模塊請(qǐng)求, 類似于require(‘some-module/image.png'). 如果你想要利用Webpack的模塊處理配置,就可以使用這個(gè)前綴。例如,如果你有一個(gè)對(duì)于assets的路徑解析,你需要使用 <img src="~assets/logo.png"> 來確保解析是對(duì)應(yīng)上的。相對(duì)根目錄的URL, e.g. /assets/logo.png 是不會(huì)被處理的
在 Javascript中獲取資源路徑
為了能讓W(xué)ebpack返回正確的資源路徑,你需要使用require(‘./relative/path/to/file.jpg'),由file-loader進(jìn)行解析,然后返回處理過的URL。例如:
computed: { background () { return require('./bgs/' + this.id + '.jpg') } }
注意上面的例子,在最終的構(gòu)建時(shí)將會(huì)包含./bgs/路徑下的所有圖片 這是因?yàn)閃ebpack不能猜出來在運(yùn)行時(shí)會(huì)用到其中的哪個(gè),所以會(huì)包含所有的。
“真實(shí)的” 靜態(tài)資源
作為對(duì)比,在static/下的文件都不會(huì)被Webpack處理:它們使用相同的文件名,直接拷貝到最終的路徑。你必須使用絕對(duì)路徑來引用這些文件,取決于在config.js里面加入的build.assetsPublicPath 和 build.assetsSubDirectory。
舉個(gè)例子,下面的默認(rèn)值是:
// config/index.js module.exports = { // ... build: { assetsPublicPath: '/', assetsSubDirectory: 'static' } }
所有放在 static/目錄下的文件都應(yīng)該是使用絕對(duì)URL/static/[filename]引用的。如果你將assetSubDirectory的值改成assets, 那么這些URL就會(huì)被變成 /assets/[filename]
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vscode搭建vue環(huán)境完整圖文教程(適合新手小白)
Vue框架的優(yōu)秀設(shè)計(jì)和強(qiáng)大的生態(tài)系統(tǒng)成為了越來越多開發(fā)者選擇Vue的原因,在實(shí)際項(xiàng)目過程中一個(gè)高效的開發(fā)環(huán)境能夠大大提高開發(fā)效率,這篇文章主要給大家介紹了關(guān)于vscode搭建vue環(huán)境的相關(guān)資料,需要的朋友可以參考下2023-10-10Vue實(shí)現(xiàn)面包屑導(dǎo)航的正確方式
面包屑導(dǎo)航(BreadcrumbNavigation)這個(gè)概念來自童話故事“漢賽爾和格萊特”,它的作用是告訴訪問者他們?cè)诰W(wǎng)站中的位置以及如何返回,本文為大家介紹了實(shí)現(xiàn)面包屑導(dǎo)航的正確方式,需要的可以參考一下2023-06-06如何在vuejs項(xiàng)目中使用md5加密密碼的實(shí)現(xiàn)
本文主要介紹了如何在vuejs項(xiàng)目中使用md5加密密碼的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08詳解vuex 中的 state 在組件中如何監(jiān)聽
本篇文章主要介紹了詳解vuex 中的 state 在組件中如何監(jiān)聽,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05關(guān)于vue跳轉(zhuǎn)后頁面置頂?shù)膯栴}
這篇文章主要介紹了關(guān)于vue跳轉(zhuǎn)后頁面置頂?shù)膯栴},具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05vue異步axios獲取的數(shù)據(jù)渲染到頁面的方法
今天小編就為大家分享一篇vue異步axios獲取的數(shù)據(jù)渲染到頁面的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-08-08Vue監(jiān)聽滾動(dòng)實(shí)現(xiàn)錨點(diǎn)定位(雙向)示例
今天小編大家分享一篇Vue監(jiān)聽滾動(dòng)實(shí)現(xiàn)錨點(diǎn)定位(雙向)示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-11-11