css – Webpack“OTS解析错误”加载字体

前端之家收集整理的这篇文章主要介绍了css – Webpack“OTS解析错误”加载字体前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的webpack配置指定字体应该使用url-loader加载,当我尝试使用Chrome查看页面时,我得到以下错误
OTS parsing error: invalid version tag
Failed to decode downloaded font: [My local URL]

我的配置的相关部分如下所示:

{
  module: {
    loaders: [
      // ...
      {
        test: /\.scss$/,loaders: ['style','css?sourceMap','autoprefixer','sass?sourceMap'],},{
        test: /images\/.*\.(png|jpg|svg|gif)$/,loader: 'url-loader?limit=10000&name="[name]-[hash].[ext]"',{
        test: /fonts\/.*\.(woff|woff2|eot|ttf|svg)$/,loader: 'file-loader?name="[name]-[hash].[ext]"',}
    ],}

它不会在Safari中发生,我没有尝试过Firefox。

在开发中,我通过webpack-dev-server提供文件,在生产中他们写入磁盘并复制到S3;在这两种情况下,我在Chrome中得到相同的行为。

这也发生在较大的图像(大于图像加载器配置中的10kB限制)。

解决方法

TL; DR使用您的资产的绝对路径(包括您的完整主机名),方法是将output.publicPath设置为“ http://example.com/assets/”。

问题

问题是,当从动态加载的CSS blob解析时,Chrome解析网址的方式。

当您加载页面时,浏览器加载您的Webpack包条目JavaScript文件,(当您使用style-loader)也包含您的CSS的Base64编码副本,它被加载到页面

07001
This is what it looks like in Chrome DevTools

这对于编码到CSS中作为数据URI(即,文件内容嵌入在CSS中)的所有图像或字体都很好,但是对于由URL引用的资产,浏览器必须找到并获取文件

现在默认情况下,文件加载器(url-loader委托给大型文件)将使用相对的URL来引用资源 – 这就是问题!

07002
These are the URLs generated by file-loader by default – relative URLs

当您使用相对网址时,Chrome会相对于包含的CSS文件解析它们。通常很好,但在这种情况下,包含文件是在blob:// …和任何相对URL以相同的方式引用。最终结果是Chrome尝试从父HTML文件加载它们,并最终尝试将HTML文件解析为字体的内容,这显然不会工作。

解决方

强制文件加载器使用包括协议(“http”或“https”)的绝对路径

更改您的webpack配置以包括等同于:

{
  output: {
    publicPath: "http://localhost:8080/",// Development Server
    // publicPath: "http://example.com/",// Production Server
  }
}

现在,其生成的网址将如下所示:

07003
Absolute URLs!

这些网址将由Chrome和其他所有浏览器正确解析。

使用extract-text-webpack-plugin

值得注意的是,如果你提取你的CSS到一个单独的文件,你不会有这个问题,因为你的CSS将在一个正确的文件和URL将正确解决

猜你在找的CSS相关文章