assetsPublicPath: './',問題


問題篇
最近使用frp代理開發微信vue應用,frp代理不直接暴露根目錄,因為我的根目錄已經被我的博客占用了,所以就使用nginx又代理了一層,訪問方式從越來的
wechat.youngboy.vip 變成 wechat.youngboy.vip/proxy ,在游覽器中 / 代表域名的根目錄,./代表當前路徑
比如:

域名
wechat.youngboy.vip

目錄結構
--+ static
-----xx.css
-- app.js
-- index.html

反向代理路徑為 /proxy

游覽器訪問路徑為
wechat.youngboy.vip/proxy/index.html 200

html中的src標簽
<script src = "/app.js"/> 游覽器會發送 wechat.youngboy.vip/app.js 404
<script src = "./app.js"> 游覽器訪問會發送 wechat.youngboy.vip/proxy/app.js 200

線上發布的時候一般都會使用nginx反向代理,所以使用./是最靠譜的,但是vue-cli dev 中的 assetsPublicPath不能配置成"./",而build中的卻可以配置,並可以正常訪問,雖然不影響發布但是影響開發效率。

解決篇
翻閱了一下午的webpack文檔發現是因為webpack.dev.conf.js 中的publicPath的值配錯了,原來配置的是config.dev.assetsPublicPath,只要把publicPath的值改成 "/" 就行了

 

原因分析
publicPath 總是以斜杠(/)開頭和結尾,所以publicPath不能配置為./ 所以訪問時會報錯

devServer.publicPath 官方解釋
數據類型 string
此路徑下的打包文件可在瀏覽器中訪問。

假設服務器運行在 http://localhost:8080 並且 output.filename 被設置為 bundle.js。默認 publicPath 是 "/",所以你的包(bundle)可以通過 http://localhost:8080/bundle.js 訪問。

可以修改 publicPath,將 bundle 放在一個目錄:

publicPath: "/assets/"
1
你的包現在可以通過 http://localhost:8080/assets/bundle.js 訪問。

確保 publicPath 總是以斜杠(/)開頭和結尾。
也可以使用一個完整的 URL。這是模塊熱替換所必需的。 這里是重點

publicPath: “http://localhost:8080/assets/”
bundle 可以通過 http://localhost:8080/assets/bundle.js 訪問。


免責聲明!

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



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