【问题标题】:Gatsby Not Resolving GraphQL Image AddressGatsby 无法解析 GraphQL 图像地址
【发布时间】:2020-06-01 16:12:34
【问题描述】:

我的项目基于gatsby-creative 启动器。我正在尝试添加一个 Open Graph 图像元属性。不幸的是,源文件夹中的图像地址没有被转换为正确的内容路径。这就是我所做的......

我首先向 siteMetaData 添加了“url”和“image”属性:

  siteMetadata: {
    title: `A Web Site`,
    description: `Yes, this is a web site.`,
    author: `Brent Arias`,
    url: `https://website.com`,
    image: `/images/snape.jpg`
  },

到目前为止,我正在做与online documentation 相同的事情。但是,这些说明有一条注释,指出上述“图像”属性包含Path to your image you placed in the 'static' folder。嗯?我不相信我应该“在静态文件夹中放置图像”......我认为这是 Gatsby 的工作。但是继续前进......

从这个原始的 seo.js file 开始,我在 graphQL 查询中添加了相同的“url”和“image”属性:

  const { site } = useStaticQuery(
    graphql`
      query {
        site {
          siteMetadata {
            title
            description
            author
            url
            image
          }
        }
      }
    `
  )

看起来,到目前为止一切都很好。最后,在同一个 seo.js 文件中,我为图像本身添加了一个条目:

        {
          property: `og:type`,
          content: `website`,
        },
        {
          property: `og:url`,
          content: site.siteMetadata.url,
        },
        {
          property: `og:image`,
          content: `${site.siteMetadata.url}${site.siteMetadata.image}`
        },

页面渲染时,元标记包含无用地址https://website.com/images/snape.jpg

是的,online documentation 与这种方法不同,但它似乎是等价的。我不明白为什么地址没有被解析到应该找到图像的“静态”文件夹。

作为一种变通方法,我在 seo.js 文件中添加了以下内容:

import socialBanner from '../images/snape.jpg'

当我将 socialBanner 放入同一“og:image”属性的“内容”中时,它会按预期工作并解析为:https://website.com/static/snape-119744a51329473845d08af3df4b5290.jpg

我不想要那个黑客。我需要更改哪些内容才能正确使用 Gatsby 工具(StaticQuery、Helmet 等)来处理此图像和地址?

【问题讨论】:

  • 我不明白你想要什么不想要什么。 static 文件夹的内容在构建时复制到 public。这允许您引用 webpack 未处理的本地内容。如果您希望 webpack 对您的静态图像做一些事情,那么您可以按照所示导入它,但是您将它包含在一个包中是不必要的。
  • @coreyward 我想指向我的images 文件夹中的图像,然后自动处理到我的静态文件夹中(就像在线文档一样)。我的文件夹结构是 gatsby starter 给我的。在public 文件夹下有一个static 文件夹。公用文件夹从.gitignore 中排除。解决方案中的其他图像来自.\src\images(具有由 git 捕获的内容)。我正在尝试遵循这种模式。同样,在线文档显示siteMetaData 指向images 文件夹。 Gatsby 应该为我将指定的图像翻译成静态文件夹。
  • 可以让 gatsby 转换图像并使用 graphql 将其包含在 SEO 中,但最好在根目录下创建一个新的 static 文件夹并将图像存储在那里。 gatsbyjs.org/docs/static-folder
  • @BrentArias Ahhh,如果需要,您需要使用 GraphQL 来获取图像,但如果您没有对其进行任何调整大小或处理,那么您正在做的事情就没有必要了。跨度>
  • @coreyward online documentation 只显示siteMetaData 与指向image 属性的/images/snape.jpg,对应的StaticQuery/Helmet 结果是指向static 文件夹的相对路径.为什么文档会发生这种神奇的事情,而我却没有?

标签: javascript reactjs graphql gatsby


【解决方案1】:

Gatsby 文档引用的 static 文件夹位于项目的根目录中。 Here's the documentation for the static folder and it's behavior in Gatsby.

如果您想使用 SEO 示例文档中显示的方法,您需要将您的 OpenGraph 图像添加到此文件夹,添加到 public/static,这是 Gatsby 使用的文件夹对于它生成的文件。

在模块系统之外添加资产

您可以在项目的根目录下创建一个名为static 的文件夹。您放入该文件夹的每个文件都将被复制到公用文件夹中。例如。如果您将名为sun.jpg 的文件添加到静态文件夹,它将被复制到public/sun.jpg

【讨论】:

  • 如果我将图像放入static 文件夹,是的,它会为我复制。但是在线文档显示了如何使用代码${siteUrl}${image || defaultImage} 构造该图像的元标记路径。对我来说,同样的代码会导致 https://example.com/images/snape.jpg 这是一条无用的路径。在线文档中的代码如何神奇地生成正确的路径https://example.com/static/snape.jpg
  • 行注释说明了这一点:siteMetadata 中的image 属性应该是“您放置在“静态”文件夹中的图像的路径”。 IE。如果您将图像放在static/statis/snape.jpg,您会将image 设置为statis/snape.jpg
  • @BrentArias 正确的 URL 输出不应该包含static
  • 呻吟!好的,现在我明白了!非常感谢您耐心地引导我完成这一切!
猜你喜欢
  • 2020-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
  • 2021-01-11
  • 2017-09-20
  • 1970-01-01
  • 2020-12-05
相关资源
最近更新 更多