static和assets的區別,原理就在於webpack是如何處理靜態資源的
assets
1)在vue組件中,所有模板和css都會被vue-html-loader和css-loader解析,並查找資源url。
例:<img src="./logo.png" /> 或者 background: url("./logo.png")
因為./logo.png是相對的資源路徑,將會由webpack解析為模塊依賴;
2)由於logo.png不是js,當被視作模塊依賴時,需要使用url-loader和file-loader處理它,vue-cli已經配好了這些loader(webpack)因此可以使用相對/模塊路徑。
3)由於這些資源可能在構建過程中被內聯、復制、重命名,所以它們基本是代碼的一部分,即webpack處理的靜態資源放在/src目錄中,和其它資源文件放在一起。
事實上,不必把它們全部放在/src/assets文件下,可以使用"模塊/組件"的組織方式來使用它們
例:可以在每個放置組件的目錄中存放靜態資源。
static
1)static目錄下的文件並不會被webpack處理,它們會直接復制到最終目錄(dist/static)下。
必須使用絕對路徑引用這些文件,這是通過在config.js的build.assetsPublicPath和nuild.assetsSubDirectory連接確定的。
2)任何放在static/的文件需要以絕對路徑形式引用:/static/[name]。
如果更改assetsSubDirectory的值為assets,那么路徑需更改為:/assets/[filename]。
總結
assets里面的資源會被webpack打包進代碼,static里面的資源就直接引用了;
一般在static里放一些類庫的文件,assets放屬於項目的資源文件。
說的再通俗一點,就是static放別人家的資源,assets放自己家的資源。