webpack не загружает @ font-face

в моем приложении React я реализую рендеринг на стороне сервера, поэтому я не хочу добавлять node_modules на стороне сервера из-за проблем с производительностью, но я хочу css из node_modules, которые используются как библиотеки UI Kit, поэтому я использовал webpack nodeExternal в мой файл webpack.server.config, например

const path = require('path');
const merge = require('webpack-merge');
const baseConfig = require('./webpack.base.js');
const nodeExternals = require('webpack-node-externals')
let test = {
    test: /\.css$/,
    loader: 'css/locals?module&localIdentName=[name]__[local]___[hash:base64:5]'
}   


const config = {
    target:'node',
    entry: './src/index.js',

    output:{
        filename:'bundle.js',
        path:path.resolve(__dirname,'build')
    },
    externals: [nodeExternals({
        whitelist: [/\.(?!(?:jsx?|json)$).{1,5}$/i]
    })]
}

module.exports  = merge(baseConfig,config)

здесь webpack добавляет файлы css, но он не загружает @ font-face из моих файлов пользовательского интерфейса node_modules. если я удалю nodeExternal из webpack.server.config, тогда все работает нормально, но bundle.js размер файла увеличивается.
Я уже добавил правило шрифта в свой webpack.base.config файл

const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const CSSExtract = new ExtractTextPlugin('styles.css');


module.exports ={
    module: {
        rules: [{
            loader: 'babel-loader',
            test: /\.js$/,
            exclude: /node_modules/
        }, {
            test: /\.s?css$/,
            use: CSSExtract.extract({
                use: [
                    {
                        loader: 'css-loader',
                        options: {
                            sourceMap: true
                        }
                    },
                    {
                        loader: 'sass-loader',
                        options: {
                            sourceMap: true
                        }
                    }
                ]
            })
        },{
            test: /\.(gif|svg|jpg|png|ttf|eot|woff(2)?)(\?[a-z0-9=&.]+)?$/,
            loader: 'url-loader?limit=100000&name=fonts/[name].[ext]'
        }
    ],
    },
    devtool: 'inline-source-map',
    plugins: [
        CSSExtract
    ]
}

я тоже пробовал с file-loader, но та же проблема
показывает ошибку

@ font-face {
^
SyntaxError: недопустимый или неожиданный токен

Как я могу добавить файлы css из node_modules с помощью @ font-face


person zulqarnain    schedule 06.09.2018    source источник
comment
хорошее руководство по загрузке шрифтов, возможно, это поможет: chriscourses.com/blog/loading-fonts -webpack   -  person Vasyl Gutnyk    schedule 06.09.2018
comment
@VasylGutnyk, я следил почти за всем, что упоминается в этой статье   -  person zulqarnain    schedule 06.09.2018
comment
у вас тоже есть загрузчики для css?   -  person PlayMa256    schedule 06.09.2018
comment
@ PlayMa256 да, css-loader и sass-loader   -  person zulqarnain    schedule 06.09.2018
comment
Возможный дубликат Загрузка шрифтов с помощью Webpack и font-face   -  person csilk    schedule 06.09.2018
comment
@csilk, я уже использую загрузчик URL, как показано на ans   -  person zulqarnain    schedule 06.09.2018


Ответы (1)


вот настроен веб-пакет:

{
        test: /\.(woff(2)?|ttf|eot)(\?v=\d+\.\d+\.\d+)?$/,
        use: [
          {
            loader: "file-loader",
            options: {
              name: "[name].[contenthash].[ext]",
              outputPath: "fonts/",
            },
          },
        ],
      },

тогда вам нужно импортировать их в основной файл css или scss.

@font-face {
  font-family: "Montserrat";
  src: url("../../assets/fonts/Montserrat-Light.ttf");
  font-weight: lighter;
  font-style: normal;
}
person Yilmaz    schedule 30.07.2020