網(wǎng)上流行的解決方案是將assetsPublicPath: '/'改成'./',下面說(shuō)一下這個(gè)解決方案的弊端:
通常頁(yè)面空白的問(wèn)題出現(xiàn)大多數(shù)是由于Spring Boot端配置了server.servlet.context-path,上下文改變了css, js等文件的訪問(wèn)路徑,文件無(wú)法加載導(dǎo)致index.html顯示空白。'/'改成'./'是將絕對(duì)路徑變?yōu)橄鄬?duì)路徑,可以動(dòng)態(tài)適應(yīng)Spring Boot端上下文的改變,這是為什么這個(gè)解決方案起作用的原因。
Vue項(xiàng)目部署在Spring Boot出現(xiàn)的另一個(gè)常見(jiàn)問(wèn)題是當(dāng)刷新瀏覽器的時(shí)候出現(xiàn)white label, 也就是404錯(cuò)誤,解決的方案基本是把error page配置成為Vue的index.html。
這兩個(gè)解決方案有沖突的地方,當(dāng)router出現(xiàn)子路徑的時(shí)候刷新瀏覽器,error page會(huì)指向Vue的index.html頁(yè)面,此時(shí)頁(yè)面中訪問(wèn)css,js文件的路徑是相對(duì)路徑,也就是上下文路徑+router子路徑,這將導(dǎo)致css,js再次無(wú)法正常加載,這就是相對(duì)路徑的弊端。
由于router會(huì)出現(xiàn)子路徑,因此必須保證assetsPublicPath為絕對(duì)路徑,下面講一下保持絕對(duì)路徑的解決方案:
1 假設(shè)Spring Boot端配置server.servlet.context-path: api, 對(duì)應(yīng)Vue的/config/index.js中assetsPublicPath: '/'改成 '/api/'
2 router/index.js中配置base: '/api/', 這是保證瀏覽器刷新時(shí)上下文參數(shù)和router跳轉(zhuǎn)路徑一致。
3 對(duì)于Ajax請(qǐng)求需要配置baseURL, 如果使用Axios, 可以采用如下方法在main.js中配置
// http request 攔截器 Axios.interceptors.request.use( config => { if (localStorage.getItem('id_token')) { config.headers.Authorization = localStorage.getItem('id_token') } config.baseURL = '/api' return config }, err => { return Promise.reject(err) })
4 另外需要注意的一點(diǎn),按照Spring Boot默認(rèn)配置, 在Vue端/config/index.js中assetsSubDirectory: 'static'要改變?yōu)槠渌址热纾?content', 'vue', 'api'等等。
5 試過(guò)將assetsSubDirectory配置為空,它和另一個(gè)css圖片加載的方案有沖突,圖片加載解決方案是在/build/util.js中加一行配置
// Extract CSS when that option is specified // (which is the case during production build) if (options.extract) { return ExtractTextPlugin.extract({ use: loaders, fallback: 'vue-style-loader', publicPath: '../../' })
結(jié)尾附上Spring Boot端將error page指向Vue的index.html代碼:
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.web.server.ConfigurableWebServerFactory; import org.springframework.boot.web.server.ErrorPage; import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpStatus; @Configuration public class ServletConfig { private static final Logger logger = LoggerFactory.getLogger(ServletConfig.class); @Bean public WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer() { logger.info("come to 404 error page"); return factory -> { ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/index.html"); factory.addErrorPages(error404Page); }; } }
總結(jié):
以上所述是小編給大家介紹的Vue項(xiàng)目部署在Spring Boot出現(xiàn)頁(yè)面空白問(wèn)題的解決方案,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com