解决 Next.js 中引入本地字体报 404 错误的问题

在 Next.js 中,我们经常需要引入本地字体来美化网页的样式,但是有时候会遇到引入本地字体时出现 404 错误的情况。这篇文章将带你解决这个问题。

问题原因

在 Next.js 中,我们可以在 public 目录下创建一个 fonts 文件夹,然后在 CSS 文件中使用 @font-face 引入本地字体文件。但是,有时候我们可能会遇到 404 错误,即字体文件无法被正确加载。

这是因为 Next.js 会将所有 public 目录下的文件都打包到根目录下的 _next/static 文件夹中,并且在打包时会根据文件名生成哈希值作为文件名。因此,如果我们在 CSS 文件中直接引用 public/fonts/xxx.ttf 这样的路径,最终生成的文件名可能是 public/fonts/xxx.ttf?hash=abc123,而实际上 _next/static/public/fonts/xxx.ttf?hash=abc123 这个文件并不存在,就会出现 404 错误。

解决方法

为了解决这个问题,我们需要使用 url-loaderfile-loader 来加载本地字体文件,并且需要手动指定输出路径和文件名。

使用 url-loader

首先,我们需要安装 url-loader

然后在 next.config.js 中配置 url-loader

上述代码中,我们使用 url-loader 来处理字体文件,并将小于 8KB 的字体文件转换成 base64 编码。如果文件大小超过了 8KB,就使用 file-loader 来处理。同时,我们手动指定了输出路径和文件名,并使用哈希值作为文件名的一部分,以避免缓存问题。

最后,在 CSS 文件中使用 url() 函数来引入字体文件:

使用 file-loader

如果你不想将小于 8KB 的字体文件转换成 base64 编码,可以使用 file-loader 来处理字体文件。首先,我们需要安装 file-loader

然后在 next.config.js 中配置 file-loader

上述代码中,我们使用 file-loader 来处理字体文件,并手动指定了输出路径和文件名,并使用哈希值作为文件名的一部分。

最后,在 CSS 文件中使用相对路径来引入字体文件:

总结

在 Next.js 中引入本地字体时,我们需要使用 url-loaderfile-loader 来处理字体文件,并手动指定输出路径和文件名。这篇文章中,我们介绍了如何使用这两个工具来解决引入本地字体报 404 错误的问题,并提供了示例代码。希望这篇文章能帮助你解决类似的问题。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/657c0395d2f5e1655d6bd82c


纠错
反馈