• element打包部署出现iconfont图标乱码


    项目打包部署后,使用的iconfont图标偶尔会出现乱码。网上查阅资料,原因主要有两个,一是element版本太低,不支持一些图标;二是sass编译导致的问题。
    查看项目引入的element版本为2.14.1,排除版本低的原因,如果是版本低,则升级版本再尝试。再者,乱码问题并不是一直出现,存在随机性,也排除element版本低而导致。
    从sass编译角度排查,element源码中使用的node-sass,而项目编译如果使用dart-sass,可能就会出现问题。在package.json中找到引入的是sass,而不是dart-sass,查阅资料说其内部依赖的是dart-sass,那么就卸载sass或dart-sass,安装node-sass和sass-loader,安装可能会失败,此时需要查询项目使用的element版本和它对应的node-sass和sass-loader版本,指定版本安装。

    // 卸载
    npm uninstall sass dart-sass --save
    
    // 安装
    npm install node-sass@6.0.1 sass-loader@10.2.0 --save
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如果是在无外网环境开发或不方便更换依赖,也可以选择不将iconfont图标编译,直接引用。所以这种方式不适用于一键部署。

    1. 找到node_modules\element-ui\packages\theme-chalk\src\base.scss文件,去掉icon.scss的引入
    2. 在main.js引入:import 'element-ui/lib/theme-chalk/icon.css'
    
    • 1
    • 2

    还有一种使用css-unicode-loader.js的方式(不知道是不是因为项目已经卸载了sass的缘故,引入报错,暂作记录备份)
    如果使用vue-cli4+和scss(sass)

    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") });
            });
          });
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    使用webpack.config.js

    if use webpack.config.js, add the loader in the config file .

    // webpack.config.js
    module.exports = {
      ...
      module: {
        rules: [{
          test: /\.scss$/,
          use: [{
              loader: "style-loader" // Creates `style` nodes from JS strings
          }, {
              loader: "css-loader" // Translates CSS into CommonJS
          }, {
              loader: "css-unicode-loader" // Convert double-byte character to unicode encoding.
          }, {
              loader: "sass-loader" // Compiles Sass to CSS
          }]
        }]
      }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    This loader must be before sass-loader if you used sass-loader

    本地测试打包后是否乱码的方法:
    将publicPath改为相对路径,打包。比如:

    module.exports = {
    	...
    	publicPath: './',
    	outputDir: 'dist',
    	...
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    打包后,打开dist中的index.html,打开控制台查看Network,找到图标打包后的样式文件,查看内容是否乱码。
    在这里插入图片描述

  • 相关阅读:
    自制python搜索小工具,比电脑自带的还要快
    Java集合部分总结
    Python学习7(正则表达式)
    Yarn pengding任务的原因之一:Reserved
    Vue3 —— 怎样利用vite创建一个vue3项目
    LeetCode-子数组的最小值之和
    Spring整合MyBatis、Spring整合JUnit4(Spring纯注解开发完结篇)
    基于httpd和lvs的dr模式简单测试
    BUUCTF Misc 来首歌吧 & 荷兰宽带数据泄露 & 面具下的flag & 九连环
    【蓝桥杯真题练习】STEMA科技素养练习题库 答案版011 持续更新中~
  • 原文地址:https://blog.csdn.net/weixin_43794073/article/details/125884737