關於qiankun微服務css文件中ElementUI字體引用路徑的解決方法


問題描述:

子應用使用的是vue+elementUI,在項目main.js中需要引入elementUI的樣式文件。elementUI的樣式文件中有字體文件的引用,是以相對路徑的形式寫在css文件中的,

本來獨立部署項目訪問是沒問題的,問題出現在以qiankun微服務的方式嵌入到主應用中時,路徑就不能在以相對路徑來顯示了,否則就會顯示404。

問題分析:

首先vue項目在webpack打包時會使用extract-text-webpack-plugin這個插件來抽離js文件中的css作為一個單獨的css文件,qiankun對於子應用css的文件處理是將css文件的內容以style的方式插入到dom中。

獨立訪問子應用時,訪問的是css文件

 以微應用方式嵌入時,會將css文件的內容直接嵌入到style標簽

這個時候的字體文件引用是相對路徑

 比如我的子應用部署在a.com/bbb,主應用部署在a.com/aaa,獨立訪問子應用時,字體文件的路徑就是a.com/bbb/static/fonts/XXX.wofff(能找到資源),嵌入主應用后訪問的路徑就是a.com/aaa/static/fonts/XXX.woff(找不到資源),這個時候就會報404錯誤。

qiankun官方文檔上有提到可以設置運行時publicPath來解決靜態資源的404問題,但是對於css文件內的路徑是不行的。

 

解決方案

1.在子應用打包時,提取css文件的時候,將publicPath路徑寫為絕對路徑。缺點是部署到不同環境時要手動去修改。

 

2.在子應用打包的時候,不在提取css到獨立的文件中。缺點是會導致js文件變大

 因為在打包時,對於字體文件是通過url-loader進行解析的,對於超過設置規定大小的文件,默認會改為通過file-loader進行解析,file-loader的設置項中publicPath有__webpack_public_path__這個默認值,配合使用webpack運行時publicPath設置即可。

file-loader的publicPath屬性說明: 

 使用qiankun官方的解決辦法

更進一步,如果不提取css到獨立文件,那么css都會被打包到js文件中,會導致文件變大。我們只是需要解決elementUI的字體文件引用問題,其實只涉及到elementUI的css文件,即我們只是不希望elementUI的這部分css被提取出去。

extract-text-webpack-plugin插件提供了一個allChunk設置:

allChunks:當為false的時候,只會提取初始化的時候引入的css,當allChunks屬性為true時,會把異步引入的css也提取出來。

所以我們可以將allChunks設置為false,再將css以異步的方式引入就可以達到我們需要的效果。

異步引入css文件,只需將main.js中的css引入放到App.vue中,再將App.vue改為異步加載即可。

 


免責聲明!

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



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