You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Webpack5后mini-css-extract-plugin解析asset及字体文件失败

解决Webpack5升级后字体资源解析报错的问题

为啥会出问题?

Webpack5把Webpack4里常用的file-loader/url-loader给整合了,换成了内置的asset模块系统,同时资源路径的解析规则也变了,你那套Webpack4的配置自然就不兼容了,才会出现这俩错误。

一步步修复

1. 搞定“无法解析asset模块”的错误

不用再装file-loader/url-loader了,直接在Webpack配置里给字体文件加个asset模块的规则就行:

module.exports = {
  module: {
    rules: [
      // 保留你原来的CSS处理配置
      {
        test: /\.css$/i,
        use: [MiniCssExtractPlugin.loader, 'css-loader'],
      },
      // 新增字体文件的处理规则
      {
        test: /\.(otf|ttf|woff|woff2)$/i,
        type: 'asset/resource', // 相当于Webpack4的file-loader
        generator: {
          // 指定字体输出的路径,避免乱输出找不到
          filename: 'fonts/[name][ext][query]'
        }
      }
    ]
  },
  plugins: [
    new MiniCssExtractPlugin({
      filename: 'css/[name].css' // 确保CSS输出路径正确,避免路径关联出错
    })
  ]
};

要是你想把小体积字体转成base64内嵌,可以把asset/resource换成asset/inline(对应Webpack4里url-loader的limit配置),或者用asset让Webpack自动判断要不要转。

2. 修复“找不到字体文件”的问题

先核对你的文件结构:

├── src/
│   ├── css/
│   │   └── font.css
│   └── fonts/
│       └── poppins/
│           └── Poppins-Medium.otf

那font.css里引用字体的路径得写成相对于当前CSS文件的路径,不能瞎写:

@font-face {
  font-family: 'Poppins';
  src: url('../fonts/poppins/Poppins-Medium.otf') format('opentype');
  font-weight: 500;
  font-style: normal;
}

css-loader会自动把这个相对路径转成Webpack输出目录对应的绝对路径,所以路径一定要对应上。

3. 清理没用的依赖(可选)

之前装的file-loader/url-loader现在没用了,可以卸载掉:

npm uninstall file-loader url-loader

验证

重新跑构建命令,看看俩错误是不是都没了,字体文件正常输出到指定目录,页面也能加载字体就ok了。

内容的提问来源于stack exchange,提问作者JoeTidee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 16:57:22