我在使用@rails/webpacker时遇到了加载本地字体文件的问题。这些字体在开发环境中可以加载,但是在生产环境中无法加载。看起来这是一个非常简单的问题,但是我一直很困扰。以下是我的 @font-face 代码。我的字体存储在 app/assets/images/fonts 文件夹中。
路径为:app > assets > stylesheets > config > _fonts.scss
@font-face {
font-family: "Axiforma";
src: url("fonts/Kastelov-AxiformaRegular.eot"); /* IE9 Compat Modes */
src: url("fonts/Kastelov-AxiformaRegular.eot?#iefix") format("embedded-opentype"), /* IE6-IE8 */
url("fonts/Kastelov-AxiformaRegular.otf") format("opentype"), /* Open Type Font */
url("fonts/Kastelov-AxiformaRegular.svg") format("svg"), /* Legacy iOS */
url("fonts/Kastelov-AxiformaRegular.ttf") format("truetype"), /* Safari, Android, iOS */
url("fonts/Kastelov-AxiformaRegular.woff") format("woff"), /* Modern Browsers */
url("fonts/Kastelov-AxiformaRegular.woff2") format("woff2"); /* Modern Browsers */
font-weight: 400;
font-style: normal;
}
在生产模式下获取字体文件会导致404错误。当我预编译资产时,可以看到字体文件名后面有一个哈希值。在传递给浏览器的CSS文件中,字体文件的url保持不变。为了尝试修复这个问题,我尝试使用file-loader、url-loader和resolve-url-loader在环境模块规则中,但都没有成功。以下是我的webpack配置文件中的尝试。
const { environment } = require('@rails/webpacker');
const webpack = require('webpack');
environment.plugins.prepend('Provide',
new webpack.ProvidePlugin({
$: 'jquery',
jQuery: 'jquery',
Popper: ['popper.js', 'default']
})
);
environment.module = {
rules: [
{
test: /\.(scss|sass|css)$/i,
use: [
{ loader: 'css-loader', options: { minimize: process.env.NODE_ENV === 'production' } },
{ loader: 'postcss-loader', options: { sourceMap: true } },
'resolve-url-loader',
{ loader: 'sass-loader', options: { sourceMap: true } }
]
},
{
test: /\.(woff|woff2|eot|ttf|otf)$/,
use: [
{
loader: 'file-loader',
limit: '100000'
}
],
},
{
test: /\.(png|woff|woff2|eot|ttf|svg)$/,
use: [
{
loader: 'url-loader',
limit: '100000'
}
]
}
]
};
module.exports = environment;
任何帮助都将不胜感激 :)