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

vue項目中icon亂碼的問題及解決

 更新時間:2022年12月13日 14:32:27   作者:OOOOOOh~  
這篇文章主要介紹了vue項目中icon亂碼的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

問題描述

最近發(fā)現(xiàn)項目在測試環(huán)境下icon偶爾會出現(xiàn)亂碼的情況,我自己本地一直沒能復(fù)現(xiàn),在測試環(huán)境復(fù)現(xiàn)的話就需要打開控制臺,然后按鍵刷新,一次不行就多刷新幾次,就可以復(fù)現(xiàn)這個問題。

原因分析

這個問題可能是因為項目中有用到element-ui庫,而項目中安裝的sass和element-ui源碼中的sass(node-sass)安裝版本不一致造成的。

項目中的sass

具體:

一般使用不會出現(xiàn)這個問題,因為一般引入的是element-ui的css文件,問題出在于為了主題色變化啊,需要用到scss變量引入了scss文件。

@import “~element-ui/packages/theme-chalk/src/index”;

而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)亂碼。

解決方法

直接uninstall項目中的sass,然后安裝node-sass(因為是公司項目,不好做修改)

  • node-sass 是用 node(調(diào)用 cpp 編寫的 libsass)來編譯 sass;node-sass是自動編譯實時的
  • dart-sass 是用 drat VM 來編譯 sass;dart-sass需要保存后才會生效
  • node-sass 因為國情問題經(jīng)常裝不上
  • sass官方已經(jīng)將dart-sass作為未來主要的的開發(fā)方向了,有任何新功能它會優(yōu)先支持

和后端商量下,讓css資源請求的響應(yīng)頭的Content-Type增加"charset=utf-8"聲明。(沒做嘗試)

看到大佬寫的一個方法 https://github.com/styzhang/css-unicode-loader

安裝大佬寫的loader

yarn add css-unicode-loader --dev

對應(yīng)的配置

if use vue-cli 4+ and scss(sass), add the loader in the vue config file .
// vue.config.js
module.exports = {
? configureWebpack: config => {
? ? 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") });
? ? ? ? });
? ? ? });
? ? }
}

vue.config.js具體配置

const path = require('path');
const webpack = require('webpack');
const buildDate = JSON.stringify(new Date().toLocaleString());
let devServer = null;

try {
? ?devServer = require('./devServer');
}
catch (e) {
? ?devServer = {};
}

function resolve(dir) {
? ?return path.join(__dirname, dir);
}

// 將之前的plugins提出來封裝成一個函數(shù)
function getPlugins() {
? ?const plugins = [
? ? ? // Ignore all locale files of moment.js
? ? ? new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
? ? ? new webpack.DefinePlugin({
? ? ? ? ?APP_VERSION: `"${require('./package.json').version}"`,
? ? ? ? ?BUILD_DATE: buildDate,
? ? ? }),
? ?];

? ?return plugins;
}

const vueConfig = {
? // configureWebpack: {
? // ? ?// webpack plugins
? // ? ?plugins: [
? // ? ? ? // Ignore all locale files of moment.js
? // ? ? ? new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
? // ? ? ? new webpack.DefinePlugin({
? // ? ? ? ? ?APP_VERSION: `"${require('./package.json').version}"`,
? // ? ? ? ? ?BUILD_DATE: buildDate,
? // ? ? ? }),
? // ? ?],
? // },

? ?configureWebpack: config => {
? ? ? config.module.rules.filter(rule => {
? ? ? ? ?return rule.test.toString().indexOf('scss') !== -1;
? ? ? })
? ? ? ? ?.forEach(rule => {
? ? ? ? ? ? rule.oneOf.forEach(oneOfRule => {
? ? ? ? ? ? ? ?oneOfRule.use.splice(oneOfRule.use.indexOf(require.resolve('sass-loader')), 0,
? ? ? ? ? ? ? ? ? { loader: require.resolve('css-unicode-loader') });
? ? ? ? ? ? });
? ? ? ? ?});
?? ? ?// 獲取plugins函數(shù)的內(nèi)容
? ? ? const plugins = getPlugins();
? ? ? //這里要返回一個對象
? ? ? return { plugins };
? ?},

? ?chainWebpack: (config) => {
? ? ? config.plugin('html')
? ? ? ? ?.tap(args => {
? ? ? ? ? ? args[0].title = process.env.VUE_APP_TITLE;
? ? ? ? ? ? return args;
? ? ? ? ?});
? ? ? config.module
? ? ? ? ?.rule('svg')
? ? ? ? ?.exclude.add(resolve('./src/assets/icons'))
? ? ? ? ?.end();
? ? ? config.module
? ? ? ? ?.rule('icons')
? ? ? ? ?.test(/\.svg$/)
? ? ? ? ?.include.add(resolve('./src/assets/icons'))
? ? ? ? ?.end()
? ? ? ? ?.use('svg-sprite-loader')
? ? ? ? ?.loader('svg-sprite-loader');
? ?},

? ?css: {
? ? ? loaderOptions: {
? ? ? ? ?less: {
? ? ? ? ? ? // DO NOT REMOVE THIS LINE
? ? ? ? ? ? javascriptEnabled: true,
? ? ? ? ?},
? ? ? },
? ?},

? ?devServer,

? ?// disable source map in production
? ?productionSourceMap: false,
? ?lintOnSave: true,
? ?// babel-loader no-ignore node_modules/*
? ?transpileDependencies: [],
};

module.exports = vueConfig;

驗證方法

修改前yarn build,檢查dist/css/app.xxx.css文件中的emp-icon-xxx:before{content:"?"}

修改后 yarn build ,檢查dist/css/app.xxx.css文件中的emp-icon-xxx:before{content: '\xxx'}

總結(jié)

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

相關(guān)文章

  • vue生命周期四個階段created和mount詳解

    vue生命周期四個階段created和mount詳解

    這篇文章主要介紹了vue生命周期四個階段created和mount,本文給大家介紹的非常詳細(xì),補充介紹了什么是實例,什么是實例被掛載到DOM,什么是dom,dao操作又是什么,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • Vue3+elementui plus創(chuàng)建項目的方法

    Vue3+elementui plus創(chuàng)建項目的方法

    這篇文章主要介紹了Vue3+elementui plus創(chuàng)建項目的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Vue路由模塊化配置的完整步驟

    Vue路由模塊化配置的完整步驟

    這篇文章主要給大家介紹了關(guān)于Vue路由模塊化配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Vue具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • vue中props賦值給data出現(xiàn)的問題及解決

    vue中props賦值給data出現(xiàn)的問題及解決

    這篇文章主要介紹了vue中props賦值給data出現(xiàn)的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue 實現(xiàn)購物車總價計算

    vue 實現(xiàn)購物車總價計算

    今天小編就為大家分享一篇vue 實現(xiàn)購物車總價計算,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • 關(guān)于Pinia狀態(tài)持久化問題

    關(guān)于Pinia狀態(tài)持久化問題

    這篇文章主要介紹了關(guān)于Pinia狀態(tài)持久化問題,具有很好的參考價值,希望對大家有所幫助。
    2023-03-03
  • vue 的keep-alive緩存功能的實現(xiàn)

    vue 的keep-alive緩存功能的實現(xiàn)

    本篇文章主要介紹了vue 的keep-alive緩存功能的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Vue使用Axios進行跨域請求的方法詳解

    Vue使用Axios進行跨域請求的方法詳解

    在開發(fā)現(xiàn)代?Web?應(yīng)用時,前端和后端通常分離部署在不同的服務(wù)器上,這就會引發(fā)跨域請求問題,所以本文將詳細(xì)介紹如何在?Vue?項目中使用?Axios?發(fā)起跨域請求時解決跨域問題的相關(guān)資料,需要的朋友可以參考下
    2024-09-09
  • vue.js-div滾動條隱藏但有滾動效果的實現(xiàn)方法

    vue.js-div滾動條隱藏但有滾動效果的實現(xiàn)方法

    下面小編就為大家分享一篇vue.js-div滾動條隱藏但有滾動效果的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • 如何巧用Vue.extend繼承組件實現(xiàn)el-table雙擊可編輯(不使用v-if、v-else)

    如何巧用Vue.extend繼承組件實現(xiàn)el-table雙擊可編輯(不使用v-if、v-else)

    這篇文章主要給大家介紹了關(guān)于如何巧用Vue.extend繼承組件實現(xiàn)el-table雙擊可編輯的相關(guān)資料,不使用v-if、v-else,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06

最新評論

福建省| 原阳县| 邹平县| 龙南县| 高州市| 武夷山市| 十堰市| 西宁市| 西宁市| 固镇县| 象山县| 玛沁县| 荆州市| 宝鸡市| 滁州市| 炉霍县| 满城县| 眉山市| 伊春市| 商洛市| 拜城县| 钦州市| 湖口县| 边坝县| 霍山县| 永寿县| 大庆市| 岐山县| 尚义县| 屯门区| 西峡县| 和田市| 甘南县| 安陆市| 青海省| 法库县| 济阳县| 博湖县| 永定县| 乌鲁木齐市| 梁平县|