问题描述:在vue+elementUI项目中,大家可能会遇到这样的问题,开发过程中并未遇到过图标展示乱码的问题,但项目打包部署上线后,偶尔就会出现图标乱码问题,刷新后又恢复正常。

打包后,我们打开dist/css/app.xxx.css文件,发现content: ""这个值乱码或者是空的。

解决方案:
一、升级sass并配置outputStyle(推荐方案)
1、在package.json配置文件中找到sass,将其升级到1.39.0
2、vue.config配置文件中添加或修改outputStyle配置(前提是项目中使用的都是scss)
module.exports = {css: {loaderOptions: {scss: {sassOptions: { outputStyle: 'expanded' } // fix: 解决 element-ui 图标 icon 偶现乱码问题 }}} }
修改后content值会正常展示:

dart-sass 只支持两种输出格式outputStyle:
- expanded:输出跟我们平时开发中手写的css样式很像,选择器、属性等各占一行,属性根据选择器缩进,而选择器不做任何缩进
- compressed:输出方式删除所有无意义的空格、空白行、以及注释,将文件体积压缩到最小,同时也会做出其他调整,比如会自动替换占用空间最小的颜色表达方式
二、由dart-sass改回node-sass
三、自己额外引入 element-ui 的图标 css 文件