處理靜態資產
你可能已經注意到,在項目結構中我們有兩個靜態資產目錄:src/assets
和static/
。他們之間有什么區別?
要回答這個問題,我們首先需要了解Webpack如何處理靜態資產。在*.vue
組件中,您的所有模板和CSS都會被解析vue-html-loader
並css-loader
查找資產URL。例如,在<img src="./logo.png">
和中background: url(./logo.png)
,"./logo.png"
是一個相對資產路徑,將由Webpack解析為模塊依賴項。
因為logo.png
不是JavaScript,當被視為模塊依賴時,我們需要使用url-loader
和file-loader
處理它。此模板已經為您配置了這些加載器,因此您可以免費獲得文件名指紋識別和條件base64內聯等功能,同時可以使用相對/模塊路徑而無需擔心部署。
由於這些資產可能在構建期間內聯/復制/重命名,因此它們本質上是源代碼的一部分。這就是為什么建議將Webpack處理的靜態資源放在/src
其他源文件中。實際上,您甚至不需要全部放入/src/assets
:您可以使用它們基於模塊/組件來組織它們。例如,您可以將每個組件放在其自己的目錄中,其靜態資源就在它旁邊。
“真正的”靜態資產
相比之下,static/
Webpack根本不處理文件:它們按原樣直接復制到最終目標,文件名相同。必須使用絕對路徑引用這些文件,絕對路徑由join build.assetsPublicPath
和build.assetsSubDirectory
in 確定config.js
。
例如,使用以下默認值:
// config/index.js module.exports = { // ... build: { assetsPublicPath: '/', assetsSubDirectory: 'static' } }
放入的任何文件static/
都應使用絕對URL引用/static/[filename]
。
注意:如果更改assetSubDirectory
為assets
,則需要將這些URL更改為/assets/[filename]
應用:
在src/components/ele.vue中,data數據里引入文件數據
imgsUrl:[ {src:'../static/imgs/02.jpg'}, {src:'./static/imgs/03.jpg'}, {src:'http://www.pptok.com/wp-content/uploads/2012/08/xunguang-4.jpg'} ]
第一行為相對路徑,第二行為使用絕對URL引用./static/[filename],第三行為網上圖片路徑。
建議做法為:絕對URL引用./static/[filename]
補充:
在原來的絕對URL引用/static/[filename]基礎上,在最之前添加了一個點.,因為vue項目打包后,如果不加.,無法正確獲取圖片等靜態資源路徑。
.