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

關(guān)于Vite項(xiàng)目打包后瀏覽器兼容性問(wèn)題的解決方案

 更新時(shí)間:2022年08月02日 11:31:50   作者:Memory_Space-2020  
本文主要介紹了關(guān)于Vite項(xiàng)目打包后瀏覽器兼容性問(wèn)題的解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一、問(wèn)題描述

vite+vue3項(xiàng)目開發(fā)完以后,你會(huì)發(fā)現(xiàn)打包后的項(xiàng)目運(yùn)行在新版瀏覽器可以正常顯示,但運(yùn)行在一些版本比較老的瀏覽器如 Chrome < 23、Firefox < 21和IE等瀏覽器上時(shí)顯示一片空白,并且沒(méi)有任何的錯(cuò)誤提示。

二、問(wèn)題分析

此時(shí)你的大腦可能跟頁(yè)面一樣也是一片空白,但是不要慌,我們先分析一下產(chǎn)生這個(gè)問(wèn)題的可能的原因:那些版本較低的瀏覽器不支持ES6的語(yǔ)法和新API,而Babel默認(rèn)只轉(zhuǎn)換新的JavaScript句法,不轉(zhuǎn)換新的API,比如Proxy、Symbol、Promise等全局對(duì)象,以及一些定義在全局對(duì)象上的方法都不會(huì)轉(zhuǎn)碼。

三、解決方案

Plan A:在vite.config.js中配置瀏覽器的兼容性。

我們項(xiàng)目是用vite搭建的,因此我首先想到了使用vite自帶的API去配置瀏覽器兼容性。
配置build.target和buid.cssTarget

  build: {
      target: ['chrome52'],
      cssTarget: ["chrome52"],
      }

打包并運(yùn)行到瀏覽器后發(fā)現(xiàn)還是一片空白,查看打包生成的文件,發(fā)現(xiàn)里面依然有const、Promise等新語(yǔ)法和API,并沒(méi)有為我們轉(zhuǎn)換。Plan A ,No.

Plan B:先配置TypeScript轉(zhuǎn)換語(yǔ)法,然后再讓vite兼容目標(biāo)。

在tsconfig.json文件內(nèi)配置target為”es5”,然后開始打包。
打包時(shí)報(bào)錯(cuò):error: Transforming const to the configured target environment (“es5”) is not supported yet
錯(cuò)誤信息大抵在告訴我們:代碼中有const等目標(biāo)環(huán)境不支持的語(yǔ)法,并且它目前還不支持將const轉(zhuǎn)換為目標(biāo)環(huán)境"es5"。嗯這就有點(diǎn)意思了。Plan B, NO.

Plan C:引入babel-polyfill環(huán)境墊片

上面轉(zhuǎn)換語(yǔ)法的方案失敗后,我嘗試給瀏覽器環(huán)境請(qǐng)一個(gè)外援:babel-polyfill,讓它來(lái)做那些低版本瀏覽器環(huán)境做不到的事情。
什么是polyfill?官方的解釋是:“用于實(shí)現(xiàn)瀏覽器不支持原生功能的代碼”,我們可以簡(jiǎn)單理解為polyfill可以在當(dāng)前運(yùn)行環(huán)境中模擬出那些當(dāng)前環(huán)境不支持的API,它為我們的當(dāng)前環(huán)境提供了一個(gè)墊片,我們可以在這個(gè)墊片上使用新API。

首先我們先安裝babel-polyfill:

npm install --save babel-polyfill

然后在main.js里引入它:

import ‘babel-polyfill'

然后我們重新打包、啟動(dòng)、運(yùn)行到瀏覽器,有些伙伴到這一步可能就成功了,但我的仍然是一片空白!
慌不慌?你說(shuō)慌不慌,慌!我也覺(jué)得慌,為什么?網(wǎng)上那么多人用這個(gè)方法成功了,但我們失敗了,這能不慌? Plan C,No!

Plan D:使用@vitejs/plugin-legacy插件

以上三個(gè)方案失敗后,我又重新回歸到vite這一塊,在vite官方文檔中我找到了vite自帶插件庫(kù),并且在插件庫(kù)中找到了一個(gè)關(guān)于瀏覽器兼容支持的插件:@vitejs/plugin-legacy
首先安裝插件:npm i @vitejs/plugin-legacy -D

然后在vite.config.js中配置

import legacyPlugin from '@vitejs/plugin-legacy'
export default defineConfig( {
? ? plugins: [
? ? ? ? legacyPlugin({
? ? ? ? ? ? targets:['chrome 52'], ?// 需要兼容的目標(biāo)列表,可以設(shè)置多個(gè)
? ? ? ? ? ? additionalLegacyPolyfills:['regenerator-runtime/runtime'] // 面向IE11時(shí)需要此插件
? ? ? ? })
? ? ]
})

打包、運(yùn)行到瀏覽器。

新版本瀏覽器運(yùn)行正常!舊版本瀏覽器運(yùn)行正常!Plan D,yes!

以下是@vitejs/plugin-legacy插件的簡(jiǎn)單介紹:
插件默認(rèn)行為:
1.使用@babel/preset-env轉(zhuǎn)換,為包中的每個(gè)塊生成相應(yīng)的遺留塊。
2.生成一個(gè)包含 SystemJS 運(yùn)行時(shí)的 polyfill 塊。
3.使用

打包后的變化:

  • 啟用插件后打包完成的目錄多出了一些帶有l(wèi)egacy字樣的文件,每個(gè)js腳本文件都有一個(gè)與其對(duì)應(yīng)的遺留版本。
  • html文件中新增了一些腳本,這些腳本根據(jù)瀏覽器的支持程度來(lái)動(dòng)態(tài)的引入正常版本文件還是帶有l(wèi)egacy字樣的遺留版本文件。
  • 此時(shí)當(dāng)項(xiàng)目運(yùn)行在一些版本較低的瀏覽器時(shí),插件添加的腳本會(huì)自動(dòng)加載legacy版本的文件。

四、過(guò)程中遇到的其他問(wèn)題

在Plan D成功在低版本瀏覽器運(yùn)行以后,發(fā)現(xiàn)有一些CSS樣式顯示不正常,隨后確認(rèn)是重寫Vant的CSS變量沒(méi)有生效。
剛開始認(rèn)為是CSS在打包時(shí)沒(méi)有做好兼容處理,然后就折騰了一番CSS的兼容支持。css解釋器、postcss插件和vite配置css目標(biāo)環(huán)境都沒(méi)用。

后面就沒(méi)有什么思路了,后來(lái)想起來(lái)在vite.config.js配置中有一個(gè)關(guān)于樣式按需加載的插件:

此時(shí)就想是不是這個(gè)插件影響到了我的CSS的正常效果,當(dāng)我把它移除并重新打包運(yùn)行后,樣式就回歸正常了,看來(lái)確實(shí)是被它影響的。
使用這個(gè)按需加載的插件后,當(dāng)頁(yè)面加載時(shí),它會(huì)根據(jù)它的一些規(guī)則去判斷當(dāng)前需要加載哪些樣式文件,哪些不需要加載。在加載這些樣式文件時(shí),如果樣式文件里有我們自定義全局樣式重名的,那么根據(jù)css規(guī)則,我們自定義過(guò)的全局樣式會(huì)被覆蓋掉。
在本次的案例中,我們重寫了Vant組件的部分變量,并全局引入了。在打開包含這些變量的頁(yè)面時(shí),按需加載插件此時(shí)才會(huì)加載Vant的樣式文件,我們?cè)谌种貙懙淖兞坑直恢貙懥?,因此重寫的全局變量沒(méi)有生效。

到此這篇關(guān)于關(guān)于Vite項(xiàng)目打包后瀏覽器兼容性問(wèn)題的解決方案的文章就介紹到這了,更多相關(guān)Vite打包瀏覽器兼容內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue+elementui實(shí)現(xiàn)表格多級(jí)表頭效果

    vue+elementui實(shí)現(xiàn)表格多級(jí)表頭效果

    這篇文章主要為大家詳細(xì)介紹了vue?+?elementui實(shí)現(xiàn)表格多級(jí)表頭,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • vue使用fengMap速度慢的原因分析

    vue使用fengMap速度慢的原因分析

    這篇文章主要介紹了vue使用fengMap速度慢的原因分析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue生態(tài)系統(tǒng)工具庫(kù)Vueuse的使用示例詳解

    Vue生態(tài)系統(tǒng)工具庫(kù)Vueuse的使用示例詳解

    Vueuse 是一個(gè)功能強(qiáng)大的 Vue.js 生態(tài)系統(tǒng)工具庫(kù),它提供了一系列的可重用的 Vue 組件和函數(shù),本文將介紹 Vueuse 的主要特點(diǎn)和用法,以及它在 Vue.js 開發(fā)中的作用和優(yōu)勢(shì),感興趣的可以了解下
    2024-02-02
  • 解決vue3項(xiàng)目打包后部署后某些靜態(tài)資源圖片不加載問(wèn)題

    解決vue3項(xiàng)目打包后部署后某些靜態(tài)資源圖片不加載問(wèn)題

    這篇文章主要給大家介紹了如何解決vue3項(xiàng)目打包后部署后某些靜態(tài)資源圖片不加載問(wèn)題,文中通過(guò)圖文結(jié)合的方式講解的非常詳細(xì),有需要的朋友可以參考下
    2024-05-05
  • 詳解Vue.js 響應(yīng)接口

    詳解Vue.js 響應(yīng)接口

    這篇文章主要介紹了Vue.js 響應(yīng)接口的相關(guān)資料,文中實(shí)例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • vue如何通過(guò)button的disabled控制按鈕能否被使用

    vue如何通過(guò)button的disabled控制按鈕能否被使用

    這篇文章主要介紹了vue如何通過(guò)button的disabled控制按鈕能否被使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 詳解vue-cli多頁(yè)面工程實(shí)踐

    詳解vue-cli多頁(yè)面工程實(shí)踐

    本篇文章主要介紹了詳解vue-cli多頁(yè)面工程實(shí)踐,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • 詳解gantt甘特圖可拖拽、編輯(vue、react都可用?highcharts)

    詳解gantt甘特圖可拖拽、編輯(vue、react都可用?highcharts)

    去年我遇到了一個(gè)甘特圖的需求,做了很多工作,最終還是不完美,今天使用一個(gè)新包,給大家重新學(xué)習(xí)下vue?甘特圖gantt的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-11-11
  • Vue 3.x+axios跨域方案的踩坑指南

    Vue 3.x+axios跨域方案的踩坑指南

    這篇文章主要給大家介紹了關(guān)于Vue 3.x+axios跨域方案的踩坑指南,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Vue 3.x具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • vue.config.js中devServer.proxy配置說(shuō)明及配置正確不生效問(wèn)題解決

    vue.config.js中devServer.proxy配置說(shuō)明及配置正確不生效問(wèn)題解決

    Vue項(xiàng)目devServer.proxy代理配置詳解的是一個(gè)非常常見的需求,下面這篇文章主要給大家介紹了關(guān)于vue.config.js中devServer.proxy配置說(shuō)明及配置正確不生效問(wèn)題解決的相關(guān)資料,需要的朋友可以參考下
    2023-02-02

最新評(píng)論