Как настроить webpack для загрузки пользовательских шрифтов в сборник рассказов?

Я новичок в webpack и пытаюсь загрузить пользовательские шрифты в stroybook v4, следуя этому руководству https://medium.com/@mushti_dev/hey-e6faa20b910a

Структура рабочего пространства выглядит так (приложение create-response-app + сборник рассказов)

my-project/
  .storybook
     config.js
     preview-hrad.html
     webpack.config.js
  fonts
    MyCustomFont.woff
  src
    components
       Title.js
    containers
    styles
       MyCustomFont.woff
    index.js
  stories

При загрузке шрифта из папки стилей в src конфигурация выглядит следующим образом:

webpack.config.js

const path = require('path');

module.exports = async ({ config }) => {
  // fonts
  config.module.rules.push({
    test: /\.(png|woff|woff2|eot|ttf|svg)$/,
    use: [
      {
        loader: 'file-loader',
        query: {
          name: '[name].[ext]',
        }
      }
    ],
    include: path.resolve(__dirname, '../')
  });

  return config;
};

предварительный просмотр-head.html

<style type="text/css">
  @font-face {
    font-family: 'MyCustomFont';
    src: url('styles/MyCustomFont.woff') format('woff');
    font-weight: normal;
    font-style: normal;
  }
</style>

Title.js

import React from 'react';

const Title = ({ title }) => {
  return (
    <div>
      <h2 style={{fontFamily: 'MyCustomFont'}}>{title}</h2>
    </div>
  );
};

export default Title;

У меня вопрос, как загрузить MyCustomFont.woff из папки шрифтов?

Я попытался обновить конфигурацию веб-пакета с помощью name: 'fonts/[name].[ext]', и стиля css с помощью src: url('fonts/MyCustomFont.woff') format('woff');, но мне трудно найти правильный путь к шрифту.


person pollx    schedule 12.02.2020    source источник


Ответы (1)


Я только что столкнулся с этой проблемой на storybook v6.1, а затем понял, что на самом деле две области шрифта для настройки:

  • Шрифты предварительного просмотра iframe (шрифты предварительного просмотра компонентов в preview-head.html)
  • Шрифты информационной панели сборника рассказов (шрифты навигации приборной панели в manager-head.html)

Что я сделал:

  • сделайте копию preview-head.html и переименуйте в manager-head.html
  • убедитесь, что URL-адрес шрифта, указанный в @font-face, относится к пути статической папки, указанному в сценариях npm с -s
  • Я не менял конфиг webpack в main.js

моя структура папок

|- .storybook/
   |- ...
   |- preview-head.html
   |- manager-head.html
|- src/
   |- ...
   |- fonts/
      |- font-name.otf

preview-head.html и manager-head.html

<style type="text/css">
  @font-face {
    font-family: 'font-name';
    src: url('fonts/font-name.otf') format('opentype');
    ...
  }
</style>

package.json

{
  ...
  "scripts": {
    ...
    "storybook": "start-storybook ... -s ./src",
    "build-storybook": "build-storybook -s ./src"
  }
}
person piouson    schedule 25.03.2021