1、问题描述:
当 Vue.js 项目中使用 element-ui 图标时,如果使用 npm run dev 方式启动,图标是显示正常的。
而一旦使用 npm run build 编译打包后发布到服务器上,会发现图标无法显示。
查看网络请求可以看到如下两个字体文件加载不到:
/static/css/static/fonts/element-icons.535877f.woff
/static/css/static/fonts/element-icons.732389d.ttf
2、问题原因:
查看 /build/webpack.base.conf.js 文件可以发现,woff 或 ttf 这些字体会经由 url-loader 处理后在 static/fonts 目录下生成相应的文件。
{
test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/,
loader: 'url-loader',
options: {
limit: 10000,
name: utils.assetsPath('fonts/[name].[hash:7].[ext]')
}
},
也就是说实际应该通过 /static/fonts/** 路径来获取字体图标,而实际却是请求 /static/css/static/fonts/**,自然报 404 错误。
3、解决方法:
打开 build/utils.js 文件,在如下位置添加 publicPath: ‘…/…/’
if (options.extract) {
return ExtractTextPlugin.extract({
use: loaders,
publicPath:'../../',
fallback: 'vue-style-loader'
})
} else {
return ['vue-style-loader'].concat(loaders)
}