關於它能幹什麼,就再也不贅述了,咱們主要談談生成的與webpack相關的項目結構:
javascript
大致上就分三層(固然隨着你在生成項目配置的參數不一樣,項目結構可能會有不一樣),首先package.json裏面的devDependencies屬性裏,包含了構建這個項目webpack所須要的各類依賴node包和執行項目的快捷指令配置,build文件夾是一些和webpack相關的配置,而config是一些和項目相關的配置,關於這兩個文件下每一個文件具體是幹啥的,能夠看下這篇文章,我只簡單說明一下,在執行命令時,這些文件是怎麼組合在一塊兒使用的,也能夠理解成執行順序,能夠粗略看看:
因此咱們知道,Vue-Cli之因此便捷,由於他啓用了可配置參數來初始化一個項目,至於爲何要將咱們一般的一個webpack.config.js能完成的事情寫到2個文件夾12個文件來完成,大概就是傳說中的模塊化吧,鬼知道呢?css
assetsSubDirectory:資源子目錄,指js,css,img存放的目錄,其路徑相對於index.html
好比我將其配置成:assetsSubDirectory:''和assetsSubDirectory:'static',從下面的圖,你應該就能夠直觀感覺配置assetsSubDirectory這個路徑的區別了。多說一句,此時index.html中js,css的資源路徑是這樣的:script type=text/javascript src="/static/js/manifest.js?v=8cca728d">,注意/static/
assetsPublicPath:資源目錄,默認是這樣配置的assetsPublicPath: '/',指assetsSubDirectory目錄也就是js,css,img等資源相對於服務器host地址,傳說中的絕對路徑,host是什麼,ip地址加端口號,好比http://192.168.0.102:8089/new...,其host指的就是http://192.168.0.102:8089,因此若是你若是和我同樣,用的是tomcat服務器,那就會遇到當咱們要訪問咱們的網頁時,訪問的地址是http://ip:port/projectName/in...通常沒有項目會直接用http://ip:port/index.html這個地址。因此像上面提到的js路徑地址,這時就會被解析成http://ip:port/static/js/mani...,而正確的的url路徑應該是http://ip:port/projectName/st...,因此咱們須要將assetsPublicPath: '/'改爲assetsPublicPath: '/projectName/',這樣才能保證資源的正確發佈。
坑位提示:本身當時是這樣配置的assetsPublicPath: '/projectName',也就是相對於正確的少了一個'/',但神奇的是js,css都能打包出正確的路徑,本身自動添加了一個'/',但在一個.vue的template下有一個圖片路徑被解析成http://ip:port/projectNamesta...,rojectName與static之間少了一個'/',我的估計是針對於index.html中路徑的替換和其餘位置的,多了一些容錯的處理。html
在webpack打包中,有三類hash值,仍是一篇好文推薦,分別是:vue
整個項目編譯,產生的hash值,官方js打包也是默認使用這個值,因此你全部的靜態文件都用這個打包的話,就會看到打包出的文件含有的hash值同樣,見下圖java
模塊文件編譯,產生的hash值,因此不一樣的模塊產生的hash值就不同,見下圖node