Webpack + React +多个SVG加载器问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Webpack + React +多个SVG加载器问题相关的知识,希望对你有一定的参考价值。

{
  test: /\.svg/,
  use: [
    {
      loader: 'url-loader'
    },
    {
      loader: 'svg-react-loader'
    }
  ]
}

这是关于我的module: { rules: [中的SVG加载器的webpack.config.js部分

任何人使用类似的设置,并在React中导入svg文件有问题?

我需要在CSS中加载svg并在React中导入它们。如果我使用

  • url-loader单独的CSS工作。
  • 如果我在React工作中单独使用svg-react-loader导入。

但是React中的一起导入失败,出现以下错误:

Module build failed: Error: Non-whitespace before first tag.

以下是我在React cmp中导入SVG的方法:

import StarIcon from 'svg-react-loader!mdi-svg/svg/star.svg';
答案

显然,最简单的处理加载器的方法是在导入过程中不需要在实际的JS / CSS代码中引用加载器,而是使用带有exclude属性的oneOf:

    {
      test: /\.svg$/,
      oneOf: [
        {
          exclude: path.resolve(__dirname, '../src/'),
          use: 'svg-react-loader'
        },
        {
          exclude: path.resolve(__dirname, '../node_modules/'),
          use: 'url-loader'
        },
      ],
    }
另一答案

更好的方法是使用oneOf,但使用include选项,这在逻辑上比exclude选项更正确:

{
  test: /\.svg$/,
  oneOf: [
    {
      include: path.resolve(__dirname, '../node_modules/'),
      use: 'svg-react-loader'
    },
    {
      include: path.resolve(__dirname, '../src/'),
      use: 'url-loader'
    },
  ],
}

以上是关于Webpack + React +多个SVG加载器问题的主要内容,如果未能解决你的问题,请参考以下文章

React + Webpack 不解析文件加载器

webpack

webpack实战

Webpack - 错误:无法在加载器列表中定义“查询”和多个加载器

React 16 - ES6 - Webpack - 错误:模块不是加载器(必须具有正常或俯仰功能)

Webpack/React.js:你可能需要一个额外的加载器来处理这些加载器的结果