webpack配置中的path、publicPath和contentBase


 

output中的publicPath用於給生成的靜態資源路徑添加前綴,也就是會在打包生成的html文件里面引用資源路徑中添加前綴。

當定義了output.publicPath值

 

 

 

 如上圖所示資源的路徑加上了publicPath定義的前綴。並且output的publicPath影響到了使用devServer在打包生成的靜態文件的位置,所以訪問localhost:8080時失敗。

 

devServer里面的publicPath表示的是此路徑下的打包文件可在瀏覽器中訪問,若是devServer里面的publicPath沒有設置,則會認為是output里面設置的publicPath的值。

其內部實現是使用的express.static()中間件函數,例如 app.use('/public', express.static('contentBase')), '/public' 就相當於 devServer中設置的publicPath,'contentBase'就相當於devServer中設置的contentBase,這樣當瀏覽器使用public路徑訪問時,就可以讀取到contentBase中的文件,而devServer中的contentBase指定服務器從哪里提供內容,也就是devServer服務器提供的一個存放打包資源的一個虛擬目錄。

在看一個例子,接着上面的配置,設置devServer的public(如果這里不設置publicPath,默認讀取output中的publicPath)

 

 

所以contentBase通常不需要設置,有些項目中設置成了'./dist' webpack輸出目錄,其實這里contentBase指定的‘./dist’ 目錄是一個內存中的虛擬目錄,並不是項目中的實際dist目錄。

 

所以簡單的理解是output的publicPath會在打包的html文件中引用資源路徑添加前綴

devServer中的publicPath表示在瀏覽器中用此路徑可以訪問到打包的資源

devServer中的contentBase指定一個虛擬路徑來讓devServer服務器提供內容

 

這是目前對這幾個路徑的理解,可能有理解不對的地方

 

參考https://juejin.im/post/5bb085dd6fb9a05cd24da5cf

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM