Gatsby markdown - 是否有可能以某种方式在 markdown 中保存 svg

Gatsby markdown - is it posible to save somehow svg in markdown

我对盖茨比还很陌生…… 我想从降价内容在首页上生成 4 个组件 - 4 个块,每个图像 (svg)、标题、文本。 有可能吗? 导入svg图片显示没有问题为:

import Svg from "../assets/svg/image.svg"

但是当我尝试构建查询时它不起作用:

query {
        file(relativePath: { eq: "svg/marketing.svg" }) {
              childImageSharp {
                  fluid {
                      ...GatsbyImageSharpFluid
                  }
              }
        }
    }

这个查询 returns 没有结果,但是如果是 png 文件就可以了... 我试图将路径传递给 frontmatter 数据中的 svg 并用它来显示图像,但它不起作用..

有什么想法吗?

编辑:我现在明白您需要使用 publicURL 而不是 path

我设法自己找到了解决方案...

关键是获取 svg 图片的 publicURL 并使用 <img> 标签渲染它

每个markdown文档:

---
title: "Title content"
text: "Text content"
svg_name: "svg1"
---

将 svg1.svg 图像放入资产文件夹。

我不得不从 markdown 查询 frontmatter 和 svg 文件:

query Services {
            allFile(filter: {extension: {eq: "svg"}}) {
                nodes {
                    publicURL
                    name
                }
            }
            allMarkdownRemark(sort: {fields: frontmatter___order}) {
                nodes {
                    frontmatter {
                        text
                        title
                        svg_name
                        order
                    }
                }
            }
        }

然后构造一个对象:

const {allMarkdownRemark, allFile} = data
const documents = allMarkdownRemark.nodes
const pictures = allFile.nodes

let services = documents.map(doc => {
        let pic = pictures.find(p => p.name === doc.frontmatter.svg_name)
        return doc = {...doc.frontmatter, ...pic}

    })

然后映射 services 并显示带有 img 标签的 svg:

<h2>{title}</h2>
<p>{text}</p>
<img src={publicURL} alt="Alt text" />

也许不是最优雅的解决方案,但有效。