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

如何解決elementUI打包上線后icon圖標偶爾亂碼問題

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

一、背景

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

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

二、現(xiàn)象

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

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

三、原因

本項目使用的依賴包是sass(dart-sass),elementui使用的是node-sass,而dart-sass在編譯element-ui里icon偽元素的content unicode編碼時會轉(zhuǎn)換成對應(yīng)unicode明文,所以通過偽元素來展示的圖標如el-icon-arrow:before{ content: “\e6df”},編譯之后就變成了el-icon-arrow:before{ content: “”},“”便是一個雙字節(jié)字符,導致出現(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的默認輸出格式為expanded,編譯時不會轉(zhuǎn)換unicode字符。而sassLoader修改了sass默認輸出格式為compressed。

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

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

知識擴展:

sass最終輸出的樣式包括下面幾種樣式風格:

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

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

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

但是:

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

總結(jié)

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

相關(guān)文章

  • Vue-router 切換組件頁面時進入進出動畫方法

    Vue-router 切換組件頁面時進入進出動畫方法

    今天小編就為大家分享一篇Vue-router 切換組件頁面時進入進出動畫方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue+element導航欄高亮顯示的解決方式

    vue+element導航欄高亮顯示的解決方式

    今天小編就為大家分享一篇vue+element導航欄高亮顯示的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Vue中使用Lodash的實現(xiàn)示例

    Vue中使用Lodash的實現(xiàn)示例

    本文主要介紹了Vue中使用Lodash的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Vue2 添加數(shù)據(jù)可視化支持的方法步驟

    Vue2 添加數(shù)據(jù)可視化支持的方法步驟

    這篇文章主要介紹了Vue2 添加數(shù)據(jù)可視化支持的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01
  • vue封裝Animate.css動畫庫的使用方式

    vue封裝Animate.css動畫庫的使用方式

    這篇文章主要介紹了vue封裝Animate.css動畫庫的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • element中el-table中的el-input校驗的實現(xiàn)

    element中el-table中的el-input校驗的實現(xiàn)

    本文主要介紹了element中el-table中的el-input校驗的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Vue3整合WangEditor富文本編輯器的實踐指南

    Vue3整合WangEditor富文本編輯器的實踐指南

    這篇文章主要為大家詳細介紹了如何在?Vue?3?項目中集成?WangEditor?富文本編輯器,實現(xiàn)圖文混排、自定義擴展等高階功能,感興趣的小伙伴可以了解下
    2025-03-03
  • vue3常用的API使用簡介

    vue3常用的API使用簡介

    這篇文章主要介紹了vue3常用的API使用簡介,幫助大家更好的理解和學習使用vue,感興趣的朋友可以了解下
    2021-03-03
  • Vue項目如何保持用戶登錄狀態(tài)(localStorage+vuex刷新頁面后狀態(tài)依然保持)

    Vue項目如何保持用戶登錄狀態(tài)(localStorage+vuex刷新頁面后狀態(tài)依然保持)

    關(guān)于vue登錄注冊,并保持登錄狀態(tài),是vue玩家必經(jīng)之路,這篇文章主要給大家介紹了關(guān)于Vue項目如何保持用戶登錄狀態(tài)的相關(guān)資料,localStorage+vuex刷新頁面后狀態(tài)依然保持,需要的朋友可以參考下
    2022-05-05
  • 淺析 Vue 3.0 的組裝式 API(一)

    淺析 Vue 3.0 的組裝式 API(一)

    這篇文章主要介紹了 Vue 3.0 的組裝式 API的部分資料,幫助大家更好的理解和學習vue,感興趣的朋友可以了解下
    2020-08-08

最新評論