Как мне генерировать SVG-спрайты с помощью GatsbyJS

#javascript #svg #webpack #gatsby

#javascript #svg #webpack #gatsby

Вопрос:

В моем gatsby-browser.js файле у меня есть два импорта, которые выглядят похоже на:

 @import npm-package/lib/icons.svg
@import npm-package/lib/icons-rich.svg
  

Мой текущий gatsby-node.js файл выглядит следующим образом

 const path = require('path')
const SpriteLoaderPlugin = require('svg-sprite-loader/plugin')

exports.onCreateWebpackConfig = ({ actions, getConfig }) => {
  const config = getConfig()

  config.resolve.alias = {
    ...config.resolve.alias,
     /// aliases working fine
  }

  config.module.rules = [
    ...config.module.rules,
    {
      test: /(icons|icons-rich).svg$/,
      loader: 'svg-sprite-loader',
      options: {
        extract: true,
        publicPath: './'
      },
    },
  ],

    config.plugins = [
      ...config.plugins,
      new SpriteLoaderPlugin()
    ]

  actions.replaceWebpackConfig(config)
}

  

При запуске gatsby develop я получаю следующую ошибку:

 Module Warning (from ./node_modules/svg-sprite-loader/lib/loader.js):
svg-sprite-loader exception. Some loaders will be applied after svg-sprite-loader in extract mode
  

и никакие файлы никогда не выводятся.

При запуске gatsby build я получаю sprite.svg файловый вывод в public каталог, но не похоже, что svg-спрайт добавляется в тело html-документа.

1) Как мне получить gatsby develop команду для обработки и вывода svg-файла в соответствующий каталог

2) Я подозреваю, что проблема с gatsby build связана с файлом svg, который я пытаюсь включить в HTML-документ, который находится в моем Layout.jsx файле и выглядит как

 <Icon icon="all" iconPath="./public/sprite.svg" />
  

Я бы предположил, что по какой-то причине ./public/sprite.svg отсутствует, но я не могу определить, какой правильный путь к файлу (перепробовал все, кроме, по-видимому, правильной вещи).