当前位置: 首页 > news >正文

Element-UI字体图标不显示

原因

我在控制台查看请求后,发现elementUI的字体文件请求路径不对,
我的路径是/static/css/static/fonts/element-icons.535877f.woff
正确的是/static/fonts/element-icons.535877f.woff

解决

build - utils

function generateLoaders (loader, loaderOptions) {const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]if (loader) {loaders.push({loader: loader + '-loader',options: Object.assign({}, loaderOptions, {sourceMap: options.sourceMap})})}// Extract CSS when that option is specified// (which is the case during production build)if (options.extract) {return ExtractTextPlugin.extract({use: loaders,fallback: 'vue-style-loader',publicPath: '../../'  // 加上这句话})} else {return ['vue-style-loader'].concat(loaders)}
}

进一步说明:

同样的代码环境,用yarn来安装依赖后启动运行正常,而采用npm安装依赖则有类似问题。当然,这个和yarn或者npm没有关系,肯定是环境配置的问题。经过对比发现,用yarn安装依赖后,运行的页面加载的字体文件并不是一个http请求,而是把字体文件打包成了Base64编码的文件直接嵌入到了页面当中,而采用npm搭建的环境,则发起了一个http请求,并指向了错误的地址。

这样以来就初步定位了问题,排查webpack.base.conf.js,对应的字体模块加载配置

{test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,loader: 'url-loader',options: {limit: 10000,name: utils.assetsPath('fonts/[name].[ext]')}
}

由于设置了limit:10000,即文件大于10KB就会直接发起http请求的方式去加载依赖,而小于10KB的文件则直接通过Base64打包嵌入到页面当中,调整该配置为100000,再次打包测试,字体图标显示正常了,初步确定,问题就在这里。

另一个问题被发现,element-ui的版本问题,npm安装搭建的环境,请求的woff文件和ttf文件,显著变大了,分别为55956B和28200B,而通过yarn搭建的环境请求的对应字体文件只有11040B和6164B,文件大小明显不同,差异巨大。

这么一来,初步确定了是版本问题,导致了加载对应的字体文件不同,进一步导致了字体文件没有符合配置要求,没有被打包编译为Base64编码文件嵌入到页面导致。经过进一步确认,node_modules文件夹中的element-ui目录中,真实的element-ui版本为2.12.0,而package.json中对应的目标版本为2.4.9,这导致了加载的字体文件不一致,引起了这个问题。
package.json中对应的版本标识为 “element-ui”: “^2.4.9”, 就是这个 ^ 符号,锁定了element-ui的版本范围为2.4.9 ~ 3.0.0,即只要是小于3.0.0的版本,都允许自动升级。这一切还是版本不匹配挖出来的大坑。

另外牵涉到 assetsSubDirectory 和 assetsPublicPath 配置,真正的静态文件的请求地址,其实是assetsPublicPath + assetsSubDirectory 再加上对应的webpack.base.conf.js中配置filename等字段指定的文件名称,路径等。



喜欢的朋友记得点赞、收藏、关注哦!!!

相关文章:

  • Jedis高版本的JedisPoolConfig没有maxActive和maxWait
  • Java中的反射
  • T-SQL在SQL Server中判断表、字段、索引、视图、触发器、Synonym等是否存在
  • MCP协议将颠覆传统数据集成
  • 2025-05-09 提示学习概念
  • QML AnimatedImage组件详解
  • 【动手学大模型开发 20】使用 Streamlit 部署大模型 RAG应用
  • C++跨平台开发实践:深入解析与常见问题处理指南
  • 西门子PLC串口转网口模块:工业通信的智能桥梁
  • 25FIC初赛(介质)
  • BUUCTF——杂项渗透之赛博朋克
  • 视频流:大华及海康视频流本地测试预览
  • 单调栈所有模版类型(4)
  • Windows11下通过Docker安装Redis
  • A2A与MCP定义下,User,Agent,api(tool)间的交互流程图
  • 工业相机的作用及未来发展
  • spring ai alibaba ChatClient 获取大模型返回内容的方式 以及使用场景
  • 多分类问题softmax传递函数+交叉熵损失
  • [特征工程]机器学习-part2
  • 物流基础知识-术语 | 医药物流(1)
  • 重庆大学通报本科生发14篇SCI论文:涉事学生及其父亲被处理
  • 央行最新报告:积极落地5月推出的一揽子金融政策,促进经济供需平衡、物价合理回升
  • 丹麦召见美外交官,强调“不能容忍”美在格陵兰岛间谍活动
  • 东洋学人|滨田青陵:近代日本考古学第一人
  • 两部门发布外汇领域行刑反向衔接案例,织密金融安全“防护网”
  • 强沙尘暴压城近万名游客被困,敦煌如何用3小时跑赢12级狂风?