【问题标题】:Getting NextJS Image Component & @svgr/webpack to play nicely together让 NextJS 图像组件和 @svgr/webpack 一起玩得很好
【发布时间】:2021-06-20 03:56:55
【问题描述】:

我有一个安装了 @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 组件作为一个实际的组件包含在内,如下所示:&lt;Image src={&lt;Logo /&gt;} width={174} height={84} /&gt;

但是,这也不起作用。

知道什么是错误的以及如何解决它吗?

【问题讨论】:

    标签: javascript reactjs webpack next.js nextjs-image


    【解决方案1】:

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

    对于import it as a data URL,您需要在next.config.js 中提供以下 webpack 配置。

    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} />
    

    【讨论】:

    • 谢谢。我想知道,将其作为数据 URL 导入有什么缺点吗?
    • 如果你真的想使用next/image,没有太多选择,你必须使用一个URL。
    • 在某些情况下,我可以选择将 svg 文件放在公用文件夹中并将其称为常规文件——即src="/img/logo.svg。情况并非总是如此。但在这种情况下,我想知道使用数据 URL 有什么缺点吗?
    • 只是如果您可以仅引用 SVG 文件的 URL 似乎没有必要。请记住,如果您确实通过 @svgr/webpack 加载 SVG,它将成为生成的 webpack 包的一部分,而通过 URL 直接从公共文件夹引用它不会。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 2015-04-30
    • 2011-03-16
    • 2016-11-13
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    相关资源
    最近更新 更多