4

我有一个@svgr/webpack安装了库的 Next.js 站点。我已配置next.config.js为使用@svgr/webpack,现在想要导入 svg 图像并将其与新next/image组件一起使用。

这是我设置next.config.js文件的方式:

module.exports = {
  images: {
    domains: ["images.vexels.com"],
  },
  webpack(config) {
    config.module.rules.push({
      test: /\.svg$/,
      use: ["@svgr/webpack"],
    });

    return config;
  },
};

这就是我想要做的:

import Image from 'next/image'
import Logo from '@/svg/logo.svg'

<Image src={Logo} width={174} height={84} />

但是,当我这样做时,我收到以下错误:

Unhandled Runtime Error
TypeError: src.startsWith is not a function

Source
client\image.tsx (278:13) @ Image

  276 | let isLazy =
  277 |   !priority && (loading === 'lazy' || typeof loading === 'undefined')
> 278 | if (src && src.startsWith('data:')) {
      |           ^
  279 |   // https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
  280 |   unoptimized = true
  281 |   isLazy = false

我认为也许我应该将 Logo 组件作为一个实际组件包含在内,如下所示:<Image src={<Logo />} width={174} height={84} />

然而,这也没有奏效。

知道出了什么问题以及如何解决吗?

4

1 回答 1

3

使用您当前的 webpack 配置导入@/svg/logo.svg将 SVG 作为 React 组件导入。

要将其作为数据 URL 导入,您需要在next.config.js.

module.exports = {
    images: {
        domains: ['images.vexels.com']
    },
    webpack(config) {
        config.module.rules.push({
            test: /\.svg$/,
            use: ['@svgr/webpack', 'url-loader']
        });

        return config;
    }
};

然后,您将能够按如下方式使用它:

import Image from 'next/image'
import svgUrl from '@/svg/logo.svg'

<Image src={svgUrl} width={174} height={84} />
于 2021-03-23T17:39:40.917 回答