woff字体文件怎么用到html,【webpack】font-awesome加载不到woff字体文件

开发环境:Webpack + React

好几个使用了Font-awesome字体文件的项目中都遇到同一个问题,在本地测试的时候,使用webpack开发服务器,字体图标无法正常显示。

通过Chrome开发者工具可以看到,对字体文件.woff,woff2和ttf加载失败。其他的文件,比如打包之后的js文件,加载正常。

964cdd5eb0a0

字体文件加载失败

请求URL中的 http://localhost:3000/assets/bundles/ 是本地测试时webpack配置中的output.publicPath。

output: {

path: path.resolve('./html/static/bundles/local/'),

filename: "[name]-[hash].js",

publicPath: 'http://localhost:3000/assets/bundles/'

},

其实加载的是项目中对应 output.path中的文件。如下图所示,可以看到字体文件都好好的在这里。怎么其他的文件都加载成功了,就.woff,woff2和ttf总是加载不了呢?奇了怪了。

964cdd5eb0a0

待加载的字体文件以及JS文件在项目中的位置

不推荐的解决办法

使用Chrome的一个插件,叫Allow-Control-Allow-Origin: *。这个插件的功能是:

Allows to you request any site with ajax from any source. Adds to response 'Allow-Control-Allow-Origin: *' header

其实是用来解决跨域问题的,但确实也能暂时解决我们这个问题。做法是,将 http://localhost:3000/assets/bundles/* 添加到配置中,然后刷新页面,就能看到之前无法显示的字体图标都正常加载到了。

964cdd5eb0a0

Allow-Control-Allow-Origin: * 插件配置

在发现正确的解决办法之前,我们本地测试的时候,都使用这个插件。之所以可行是因为,在部署到服务器上之后,字体图标都能正常显示了。

但是最近开始做微信服务号开发时,服务号内的网页,也使用font-awesome字体。部署到服务器上之后,在PC端访问,以及在IOS上通过服务号内访问,都一切正常。问题就在于,在Android上通过服务号内访问时,字体又不能正常显示了!

没办法,只能找彻底的解决办法了。分析一下肯定是webpack的问题,所以就仔细研究webpack配置吧。

正确的解决办法

不能正常加载时,webpack处理字体文件使用的是file-loader:

{ test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: "file-loader" }

而正确的使用方式是,使用url-loader:

{test: /\.(woff|woff2|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/, loader: 'url-loader?limit=10000'}

url-loader是file-loader的上层封装,也就是有file-loader的功能,但是比它更强大,青出于蓝而胜于蓝的感觉。

The url-loader works like the file-loader, but can return a DataURL if the file is smaller than a byte limit.

强大之处在于有个过滤。比如上面的配置的意思是,小于10000b的对应格式的文件,被编码成DataURL,然后内嵌到引用的文件,这样页面加载的时候就没有http请求;大于这个限制的文件,则会使用file-loader处理,生成对应的文件放到output.path目录下,页面加载的时候仍有http请求。

当然也可以同时配置url-loader和file-loader,比如下面这种方式也是可以的。

{ test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: "url-loader?limit=10000&mimetype=application/font-woff" },

{ test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/, loader: "file-loader" }

疑问

问题是解决了,但还是有一些疑惑...

为什么.eot文件就可以使用file-loader处理并且能加载呢?

为什么偏偏是.woff,woff2一定要url-loader处理成DataURL呢?

为什么作为文件就加载不到呢?

......还有待解答。

参考阅读

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
font-awesome是一个非常流行的图标字体库,它包含了数千个矢量图标,可以用于网站和应用程序的设计和开发。fontawesome-webfont.woff?v=4.7.0是font-awesome字体库的一个文件,用于存储字体的相关信息。 字体文件使用.woff扩展名,表示它是一种Web开发中常用的字体格式,可以在网页上使用。而?v=4.7.0是版本号,用于标识字体库的版本。通过在文件名中包含版本号,可以确保每次更新后的字体文件都会被浏览器正确地缓存,从而提高网页加载速度。 使用fontawesome-webfont.woff?v=4.7.0文件,开发人员可以在网页上轻松地引用和显示font-awesome图标。通过在CSS中指定对该字体文件的引用,可以使用简单的类名来插入和管理图标。而font-awesome库提供的CSS文件则将这些类名与相应的矢量图标进行了映射。 由于font-awesome提供了丰富的图标选择,开发人员可以快速引入和使用这些图标,而不必自己设计或找寻图标素材。这样可以减少设计和开发的时间,提高工作效率。同时,font-awesome还支持对图标的样式进行定制,如更改颜色、大小和旋转等,以及与其他CSS框架的集成。 总之,fontawesome-webfont.woff?v=4.7.0是font-awesome字体库的一个文件,它提供了丰富的矢量图标供开发人员使用,并通过CSS将图标与类名进行映射,简化了图标的引用和操作。它大大简化了网页和应用程序的设计和开发工作,使得添加图标变得更加方便和高效。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值