欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

electron打包中的巨坑解決記錄

 更新時(shí)間:2023年03月01日 11:50:11   作者:zerotower  
這篇文章主要為大家介紹了electron打包中的巨坑解決記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

吐槽

從上周五到今天,我被electron打包折磨得死去活來,本來想讓測試用桌面端的,現(xiàn)在不得不改用web端,真的好無語。今天解決問題順利打包后來記錄一下這個(gè)問題。

問題一:css文件中圖片加載失敗

問題描述

問題是這樣的,electron打包為桌面端以后,登錄頁的表單是正常顯示的,但是整個(gè)頁面的背景圖沒了。我百度了一下,發(fā)現(xiàn)大多是說白屏啥的,但是我不是白屏啊,我的表單能正常顯示,為此,我在生產(chǎn)環(huán)境打開了調(diào)試工具:

 createProtocol('app')
 // Load the index.html when not in development
 win.loadURL('app://./index.html')
 win.webContents.openDevTools()

發(fā)現(xiàn)原來是我的css文件中的圖片路徑錯(cuò)了:

到底錯(cuò)在哪兒?隨意看看一份正常加載的js文件就知道了:

原來是app://./ 開頭而不是 app://,真的是大冤種轉(zhuǎn)世了! 我發(fā)現(xiàn)此問題只存在于css文件中的background:url()這樣的代碼里,項(xiàng)目使用的是vue-cli腳手架,也就是使用的webpack,我在這已經(jīng)知道大致是某些loader和plugin處理時(shí)造成的bug了。

解決過程

竟然知道了是loader和plugin的鍋,剛開始我嘗試自已寫一個(gè)loader,只要通過一行正則表達(dá)式大概就能解決問題了:

  const res= content.replace(/app:\/\/\//,"app://./");
  //app-loader
  module.exports = function (content) {
    return content.replace(/app:\/\/\//, "app://./");
}

但我失敗了。 原因在于我匹配了css文件,但是vue-cli腳手架已經(jīng)為css文件的處理內(nèi)置了許多的loader,我們可以通過 vue inspect查看實(shí)際的webpack配置來觀察loader情況

vue inspect --mode production >> webpack.test.js

其依次使用了postcss-loader、css-loader和extract-css-loader,那么,我們將自定義的app-loader放在extract-css-loader之前不就好了(注意webpack中的loader執(zhí)行順序從右到左), 通過chainWebpack這項(xiàng)vue-cli提供的鏈?zhǔn)脚渲茫▽?shí)際封裝了webapck-chain這個(gè)插件)來將我們的loader加入。

 if (IS_PROD) {
            config.resolveLoader.modules.add("./src/loaders");
            config.module.rule('css').oneOf('vue-modules').use('app-loader').before('extract-css-loader').loader('app-loader')
        }

然而經(jīng)過打包后我又失敗了,依然是app:/// 這樣的路徑。

到底為什么?

原因在于extract-css-loader是由mini-extract-css-plugin提供的,而熟悉它的小伙伴們都知道,這兩個(gè)是配套使用的,因此,當(dāng)我嘗試在我的loader中輸出文件內(nèi)容時(shí),我將得到如下信息:

我不得不懷疑實(shí)際修改代碼,劃分chunks的操作是在該plugin中完成的,看來還是寫一個(gè)plugin來處理吧! 但當(dāng)前我來不及閱讀mini-extract-css-plugin的源碼了,我只能想到在插件的hooks中找到一個(gè)合適的時(shí)機(jī)去處理已經(jīng)被處理轉(zhuǎn)換的代碼,最終我選擇了emit這個(gè)hook。 處理代碼如下:

 compiler.hooks.emit.tap('AppPlugin', (compilation) => {
            compilation.assetsInfo.forEach((assetsItem, key) => {
                if (/\.css$/.test(key) && !/^static\/lib\//.test(key)) {
                    compilation.assets[key]._value = compilation.assets[key]._value.replace(/app:\/\/\//g, "app://./")
                }
            })
        })

這段代碼解釋起來就是compilation中的assets存放著所有的之前處理后的代碼,由于使用了emit 這個(gè)hook,也就是即將被webpack輸出的代碼,通過遍歷assetsInfo(相當(dāng)于assets這個(gè)對(duì)象里的代碼清單,key是即將輸出的相對(duì)路徑),只要判斷其所有的css文件,將 _value 也就是要處理代碼使用正則替換就可以了(為什么知道是它?調(diào)試時(shí)不斷打印發(fā)現(xiàn)的)。

經(jīng)過驗(yàn)證,該方法可行。

補(bǔ)充

此部分需要有一定的webpack基礎(chǔ),我也是不停查閱官方文檔和不停百度了解了一些屬性和配置,如何手寫loader和plugin的帖子很多,我就不做搬運(yùn)了。

問題二:無法使用cookie

問題描述

當(dāng)我登錄頁面登錄后發(fā)現(xiàn)登錄失敗,任由我怎么登錄都是停留在登錄頁面。

原因分析

這個(gè)問題還是比較容易解釋的,畢竟我用了app://這樣的協(xié)議,不是web端上的http:// 這樣的,cookie就掛了。然后嘛,我的路由守衛(wèi)由于無法訪問cookie獲取到token就一直停留在登錄頁面。 正確的做法就是改用sessionStorage或者localStorage來存儲(chǔ)token。

總結(jié)

electron確實(shí)太坑了,只要足夠有耐心問題最終也能順利解決,多看文檔多調(diào)試就是了。大家還碰上哪些electron的坑呢?

以上就是electron打包中的巨坑解決記錄的詳細(xì)內(nèi)容,更多關(guān)于electron打包坑解決的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • vue 判斷元素內(nèi)容是否超過寬度的方式

    vue 判斷元素內(nèi)容是否超過寬度的方式

    這篇文章主要介紹了vue 判斷元素內(nèi)容是否超過寬度的方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue彈出框組件封裝實(shí)例代碼

    vue彈出框組件封裝實(shí)例代碼

    這篇文章主要介紹了vue彈出框組件封裝,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Vue單頁面應(yīng)用保證F5強(qiáng)刷不清空數(shù)據(jù)的解決方案

    Vue單頁面應(yīng)用保證F5強(qiáng)刷不清空數(shù)據(jù)的解決方案

    最近小編遇到這樣的問題當(dāng)vue單頁面按F5強(qiáng)刷,數(shù)據(jù)就恢復(fù)初始了,這怎么辦呢?下面小編給大家?guī)砹薞ue單頁面應(yīng)用保證F5強(qiáng)刷不清空數(shù)據(jù)的解決方案,感興趣的朋友一起看看吧
    2018-01-01
  • vue3使用defineModel實(shí)現(xiàn)父子組件雙向綁定

    vue3使用defineModel實(shí)現(xiàn)父子組件雙向綁定

    這篇文章主要個(gè)給大家介紹了在vue3中使用defineModel進(jìn)行父子組件中的雙向綁定,文中通過代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-01-01
  • vue實(shí)現(xiàn)簡單加法計(jì)算器

    vue實(shí)現(xiàn)簡單加法計(jì)算器

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)簡單加法計(jì)算器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • 手把手教你用vue3開發(fā)一個(gè)打磚塊小游戲

    手把手教你用vue3開發(fā)一個(gè)打磚塊小游戲

    這篇文章主要給大家介紹了關(guān)于如何利用vue3開發(fā)一個(gè)打磚塊小游戲的相關(guān)資料,通過一個(gè)小游戲?qū)嵗梢钥焖倭私鈜ue3開發(fā)小游戲的流程,需要的朋友可以參考下
    2021-07-07
  • vue中el-upload上傳圖片到七牛的示例代碼

    vue中el-upload上傳圖片到七牛的示例代碼

    這篇文章主要介紹了vue中el-upload上傳圖片到七牛的示例代碼,實(shí)現(xiàn)思路其實(shí)也很簡單,需要從后臺(tái)獲取七牛token上傳圖片到七牛,具體示例代碼大家跟隨小編一起學(xué)習(xí)吧
    2018-10-10
  • vue下使用nginx刷新頁面404的問題解決

    vue下使用nginx刷新頁面404的問題解決

    這篇文章主要介紹了vue下使用nginx刷新頁面404的問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 完美解決element-ui的el-input設(shè)置number類型后的相關(guān)問題

    完美解決element-ui的el-input設(shè)置number類型后的相關(guān)問題

    這篇文章主要介紹了完美解決element-ui的el-input設(shè)置number類型后的相關(guān)問題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • vue中點(diǎn)擊按鈕下載文件的實(shí)現(xiàn)方式

    vue中點(diǎn)擊按鈕下載文件的實(shí)現(xiàn)方式

    這篇文章主要介紹了vue中點(diǎn)擊按鈕下載文件的實(shí)現(xiàn)方式,具有很的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評(píng)論