2017-04-12 95 views
0

我正在使用webpack并尝试加载生成的图标字体,但一直收到“OTS解析错误:无效版本标记”错误。Webpack:加载* .eot时出现“OTS解析错误:无效版本标记”字体

这是我的WebPack配置加载字体和图像:

  { 
       test: /\.svg$/, 
       loader: 'svg-url-loader', 
       options: {} 
      }, 
      { 
       test: /\.woff(\?v=[0-9]\.[0-9]\.[0-9])?$/, 
       loader: 'url-loader?limit=65000&mimetype=application/font-woff&name=/[name].[ext]' 
      }, 
      { 
       test: /\.woff2(\?v=[0-9]\.[0-9]\.[0-9])?$/, 
       loader: 'url-loader?limit=65000&mimetype=application/font-woff2&name=/[name].[ext]' 
      }, 
      { 
       test: /\.[ot]tf(\?v=[0-9]\.[0-9]\.[0-9])?$/, 
       loader: 'url-loader?limit=65000&mimetype=application/octet-stream&name=/[name].[ext]' 
      }, 
      { 
       test: /\.eot(\?v=[a-z0-9]\.[a-z0-9]\.[a-z0-9])?$/, 
       loader: 'url-loader?limit=65000&mimetype=application/vnd.ms-fontobject&name=/[name].[ext]' 
      }, 
      { 
       test: /\.(png|jpe?g|gif|)(\?v=[0-9]\.[0-9]\.[0-9])?$/, 
       loader: 'file-loader', 
       options: { 
        name: '[name].[ext]?[hash]' 
       } 
      } 

这是我的我的,icons.css字体声明中:

@font-face { 
    font-family: 'my-font'; 
    src: url('fonts/my-font.eot?6zubex'); 
    src: url('fonts/my-font.eot?6zubex#iefix') format('embedded-opentype'), 
    url('fonts/my-font.ttf?6zubex') format('truetype'), 
    url('fonts/my-font.woff?6zubex') format('woff'), 
    url('fonts/my-font.svg?6zubex#my-font') format('svg'); 
    font-weight: normal; 
    font-style: normal; 
} 

我用不同的配置上有关此类问题的建议该主题,但我无法让它工作。

回答

1

这里的解决方案是非常简单的,实际上是:这是2017年,而微软不再支持eot,该svg格式不再存在,ttf/otf系统字体,而不是网络字体,当你还可以使用不使用它们WOFF(WOFF从字面上将字节封装为字节,但是使用表级压缩)。 “我应该使用哪种格式的浏览器上的现代网站仍然受制造商支持?” "You only need WOFF"(或WOFF2为超级现代fanciness)。

解决方案的第二部分是“为了您的用户的爱不要将您的静态资产放在您的JS应用程序包中”,因为浏览器无法以这种方式缓存它们,并且每次更新字体时您的代码,您的用户现在必须重新下载整个包,浪费大量的带宽和他们的时间。使用普通的静态服务器(AWS,github页面,请选择),将这些文件保存为普通静态资产。应该没有必要让webpack知道你的html文件将加载一个将加载webfont的.css文件的事实。你的风格代码应该简单地能够假设“有效”。

+0

感谢您的详细解释。 +1 – HelloWorld0815

+0

根据我的理解,内联静态资产不一定要慢,具体取决于用户的互联网和文件的大小。还有一些人喜欢整个页面加载在一起的快感,这是一个用户特定的问题。 –

+0

不是,但答案已经解释了为什么它不是,所以没有必要重复它作为评论。还要注意,由于捆绑了所有的静态资源,导致页面加载可能与与* redownloading *整个捆绑相关的问题无关,因为捆绑所有静态资产时,只有部分捆绑更改。特别是在尽可能快地加载页面时在使用缓存时,快速的加载体验将永远胜出,相比之下,必须点击网络来重新下载自上次请求之后未更改的文件。 –

相关问题