最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何解決elementUI打包上線后icon圖標(biāo)偶爾亂碼問題

 更新時間:2025年01月24日 14:53:10   作者:一朵野花壓海棠  
文章描述了在使用若依框架開發(fā)過程中遇到的圖標(biāo)亂碼問題,通過分析發(fā)現(xiàn)是由于sass編譯器將Unicode編碼轉(zhuǎn)換為明文導(dǎo)致的,文章提供了四種處理方法:使用css-unicode-loader、升高sass版本、替換element-ui的樣式文件和更換打包壓縮方式

一、背景

本項目是若依作為開發(fā)框架(elemen-ui + vue + sass),開發(fā)過程中,圖標(biāo)一直正常。

直到打包發(fā)布到線上,頁面偶發(fā)性出現(xiàn)圖標(biāo)亂碼問題,再次刷新頁面后,又可正常顯示。

二、現(xiàn)象

1、項目打包后,dist/css/app.xxx.css,發(fā)現(xiàn)所有的圖標(biāo)樣式content的文本未正常顯示了。例:el-icon-moon:before{content:“”};

2、雖然頁面圖標(biāo)可以正常顯示,但是用F12,會發(fā)現(xiàn)字體依然是亂碼;

三、原因

本項目使用的依賴包是sass(dart-sass),elementui使用的是node-sass,而dart-sass在編譯element-ui里icon偽元素的content unicode編碼時會轉(zhuǎn)換成對應(yīng)unicode明文,所以通過偽元素來展示的圖標(biāo)如el-icon-arrow:before{ content: “\e6df”},編譯之后就變成了el-icon-arrow:before{ content: “”},“”便是一個雙字節(jié)字符,導(dǎo)致出現(xiàn)亂碼。

/* 編譯前 */
.el-icon-edit{content:'\e878'}

/* 編譯后 */
.el-icon-edit{content:"?"}/*# sourceMappingURL=index.css.map */

四、處理方法

方式1:使用css-unicode-loader

1、安裝css-unicode-loader

npm i -D css-unicode-loader 

需要在config.js里面配置如下代碼

configureWebpack: (config) => {
    ...otherCode,
  const sassLoader = require.resolve("sass-loader");
    config.module.rules
      .filter((rule) => {
        return rule.test.toString().indexOf("scss") !== -1;
      })
      .forEach((rule) => {
        rule.oneOf.forEach((oneOfRule) => {
          const sassLoaderIndex = oneOfRule.use.findIndex(
            (item) => item.loader === sassLoader
          );
          oneOfRule.use.splice(sassLoaderIndex, 0, {
            loader: require.resolve("css-unicode-loader"),
          });
        });
      });
}

方式2:升高 sass版本到1.39.0

修改package.json文件中sass的版本,由1.26.2直接改為1.39.0,然后執(zhí)行npm install安裝依賴

方式3:替換element-ui的樣式文件

element-variables.scss 中的@import elementui刪除了,改成main.js中引入

方式4:更換打包壓縮方式

因為 sass-loader 會檢查運行環(huán)境的模式,給 dart-sass 傳入 { outputStyle: “compressed” }。 dart-sass 在這時會使用 BOM 而不是輸出 @charset。

如果是通過 @vue/cli 搭建的環(huán)境,因為有 cssnano 處理壓縮,所以可以給 vue.config.js 傳入 sassOptions 避免 compressed。

sass的默認(rèn)輸出格式為expanded,編譯時不會轉(zhuǎn)換unicode字符。而sassLoader修改了sass默認(rèn)輸出格式為compressed。

因此我們在配置sassLoader時將輸出格式重新改為expanded便能解決問題

module.exports = {
	css: {
		loaderOptions: {
			sass: {
				implementation: require('sass'),
				sassOptions: {
					// 生效代碼
					outputStyle: 'expanded'
				}	
			}
		}
	}
}

知識擴展:

sass最終輸出的樣式包括下面幾種樣式風(fēng)格:

  • 嵌套輸出方式 nested
  • 展開輸出方式 expanded
  • 緊湊輸出方式 compact
  • 壓縮輸出方式 compressed

方式5:把sass更改為node-sass編譯(不推薦)

element-ui采用的時node-sass編譯,可以把dart-sass換成node-sass。

但是:

  • node-sass 已經(jīng)被標(biāo)記為過時了,這意味著它也會慢慢退出歷史舞臺,
  • dart-sass 是被官方推薦的 sass 編譯器,dart-sass是未來的主流。
// 卸載sass
npm uninstall sass
// 安裝node-sass
npm install --dev node-sass

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue父組件和子組件之間數(shù)據(jù)傳遞和方法調(diào)用

    Vue父組件和子組件之間數(shù)據(jù)傳遞和方法調(diào)用

    vue組件在通信中,無論是子組件向父組件傳值還是父組件向子組件傳值,他們都有一個共同點就是有中間介質(zhì),子向父的介質(zhì)是自定義事件,父向子的介質(zhì)是props中的屬性。
    2022-12-12
  • vue改變對象或數(shù)組時的刷新機制的方法總結(jié)

    vue改變對象或數(shù)組時的刷新機制的方法總結(jié)

    這篇文章主要介紹了vue改變對象或數(shù)組時的刷新機制的方法總結(jié),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • Vue-cli創(chuàng)建項目從單頁面到多頁面的方法

    Vue-cli創(chuàng)建項目從單頁面到多頁面的方法

    本篇文章主要介紹了Vue-cli創(chuàng)建項目從單頁面到多頁面的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • vue清空數(shù)組的幾個方式(小結(jié))

    vue清空數(shù)組的幾個方式(小結(jié))

    本文主要介紹了vue清空數(shù)組的幾個方式,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • vue+webpack 更換主題N種方案優(yōu)劣分析

    vue+webpack 更換主題N種方案優(yōu)劣分析

    這篇文章主要介紹了vue+webpack 更換主題N種方案優(yōu)劣分析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 一文詳解如何在Vue3中封裝API請求

    一文詳解如何在Vue3中封裝API請求

    在現(xiàn)代前端開發(fā)中,API請求是不可避免的一部分,尤其是與后端交互時,下面我們來看看如何在Vue 3項目中封裝API請求,讓你在實現(xiàn)功能時更加高效吧
    2025-05-05
  • 自定義vue組件發(fā)布到npm的方法

    自定義vue組件發(fā)布到npm的方法

    本篇文章主要介紹了自定義vue組件發(fā)布到npm的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • vuejs通過filterBy、orderBy實現(xiàn)搜索篩選、降序排序數(shù)據(jù)

    vuejs通過filterBy、orderBy實現(xiàn)搜索篩選、降序排序數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了vuejs通過filterBy、orderBy實現(xiàn)搜索篩選、降序排序數(shù)據(jù)實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Vuex的actions屬性的具體使用

    Vuex的actions屬性的具體使用

    這篇文章主要介紹了Vuex的actions屬性的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Vue中el-menu-item實現(xiàn)路由跳轉(zhuǎn)的完整步驟

    Vue中el-menu-item實現(xiàn)路由跳轉(zhuǎn)的完整步驟

    這篇文章主要給大家介紹了關(guān)于Vue中el-menu-item實現(xiàn)路由跳轉(zhuǎn)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-09-09

最新評論

宁夏| 桐乡市| 右玉县| 贵定县| 大英县| 新巴尔虎右旗| 临沂市| 建水县| 汶上县| 上林县| 抚州市| 宁陵县| 台北县| 桑植县| 平罗县| 屯门区| 保亭| 张家川| 高清| 定西市| 中山市| 东至县| 铜山县| 商都县| 鄂温| 苏尼特右旗| 龙江县| 进贤县| 曲阳县| 香格里拉县| 恩平市| 朔州市| 津市市| 德清县| 疏勒县| 阳谷县| 营口市| 湛江市| 景谷| 襄樊市| 五家渠市|