Webpack4-Vue 字体(图标)文件缺失的问题解决

现象

打包后启动项目发现iconfont字体文件缺失

打开控制台发现字体文件404错误

分析

打包正式包,一般需要抽离css文件,在webpack4使用mini-css-extract-plugin插件,webpack3使用extract-text-webpack-plugin

在webpack配置中

使用mini-css-extract-plugin配置css文件在./dist/static/css目录下

plugins: [
    new MiniCssExtractPlugin({
        filename: 'static/css/[name].css',
        ignoreOrder: true
    }),
    ...
]

使用url-loader抽取ttf等字体文件在 ./dist/static/fonts目录下

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

但是 mini-css-extract-plugin抽取的css文件中,依赖的字体文件,仍是url-loader配置的相对路径 url('/static/fonts/iconfont.hash.woff'),

然而css的路径已经被重新指定了,所以加载不了字体图标文件

 

解决

配置MiniCssExtractPlugin.loader,在css的依赖的路径前手动加上相对路径

...
{
    test: /.vue$/,
    loader: 'vue-loader',
    options: {
        loaders: {
            css: [
               'vue-style-loader',
               {
                    loader: MiniCssExtractPlugin.loader,
                    options: {
                        publicPath: '../../' // 这会在css中的url()前都加上这个路径, 根据具体打包路径调整
                    }
               },
               {
                    loader: 'css-loader',
                    options: { sourceMap: true }
               },
               {
                    loader: 'postcss-loader',
                    options: { sourceMap: true }
               },

            ]
        }
    }
}
...

 

未加载问题,可能是file-loader版本和url-loader版本不匹配的问题,移步Webpack4 url-loader 字体图标变为方框,图标文件未加载_JA+的博客-CSDN博客

参考资料

  1. vue-element-admin mini-css-extract-plugin (解决背景图片不显示问题)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值