首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gatsby Graphql读取图像

Gatsby Graphql读取图像
EN

Stack Overflow用户
提问于 2019-09-18 04:22:25
回答 1查看 348关注 0票数 0

我想从YAML读取图像文件的路径,并使用gatsby-image创建响应式图像,但它不允许我做我想做的事情。

data.yaml

代码语言:javascript
复制
fileKey: data
profile:
  - name: Foo
    image: image.jpg
  - name: Bar
    image: image2.jpg

我的查询如下所示:

代码语言:javascript
复制
query DataQuery {
  pagesYaml(fileKey: {eq: "data"}) {
    profile {
      name
      image {
        childImageSharp {
          fluid(maxWidth: 2048, quality: 100) {
            ...GatsbyImageSharpFluid
          }
        }
      }
    }
  }
}

这给了我这个错误Field "image" must not have a selection since type "String" has no subfields

然而,下面的方法是可行的。

代码语言:javascript
复制
query DataQuery {
  pagesYaml(fileKey: {eq: "data"}) {
    profile {
      name
    }
    profileImage: file(relativePath: { eq: "image.jpg" }) {
      childImageSharp {
        fluid {
          ...GatsbyImageSharpFluid
        }
      }
    }
    profileImage2: file(relativePath: { eq: "image2.jpg" }) {
      childImageSharp {
        fluid {
          ...GatsbyImageSharpFluid
        }
      }
    }
  }
}

第一个查询的好处是我可以将配置文件图像放在profile中,这样在JavaScript中管理数据就更容易了。是否可以将图像放在查询中的profile对象中?

这是我的gatsby-config.js。图像存储在src/img/中。

代码语言:javascript
复制
const proxy = require('http-proxy-middleware');
const yaml = require('./src/yaml');

module.exports = {
  siteMetadata: {
    title: 'Gatsby + Netlify CMS Starter',
    description:
      'This repo contains an example business website that is built with Gatsby, and Netlify CMS.It follows the JAMstack architecture by using Git as a single source of truth, and Netlify for continuous deployment, and CDN distribution.',
  },
  plugins: [
    'gatsby-plugin-react-helmet',
    {
      resolve: 'gatsby-plugin-robots-txt',
      options: {
        policy: [{ userAgent: '*', disallow: '/' }]
      }
    },
    {
      resolve: `gatsby-plugin-sitemap`,
      options: {
        exclude: [`/admin`]
      }
    },
    'gatsby-plugin-sass',
    'gatsby-transformer-yaml',
    {
      // keep as first gatsby-source-filesystem plugin for gatsby image support
      resolve: 'gatsby-source-filesystem',
      options: {
        path: `${__dirname}/static/img`,
        name: 'uploads',
      },
    },
    {
      resolve: 'gatsby-source-filesystem',
      options: {
        path: `${__dirname}/src/pages`,
        name: 'pages',
      },
    },
    {
      resolve: 'gatsby-source-filesystem',
      options: {
        path: `${__dirname}/src/img`,
        name: 'images',
      },
    },
    {
      resolve: 'gatsby-source-filesystem',
      options: {
        path: `${__dirname}/src/data`,
        name: 'data',
      },
    },
    'gatsby-plugin-sharp',
    'gatsby-transformer-sharp',
    {
      resolve: 'gatsby-transformer-remark',
      options: {
        engines: { yaml },
        plugins: [
          {
            resolve: 'gatsby-remark-relative-images',
            options: {
              name: 'uploads',
            },
          },
          {
            resolve: 'gatsby-remark-images',
            options: {
              // It's important to specify the maxWidth (in pixels) of
              // the content container as this plugin uses this as the
              // base for generating different widths of each image.
              maxWidth: 2048,
            },
          },
          {
            resolve: 'gatsby-remark-copy-linked-files',
            options: {
              destinationDir: 'static',
            },
          },
        ],
      },
    },
    {
      resolve: 'gatsby-plugin-web-font-loader',
      options: {
        custom: {
          families: ['Appli Mincho']
        }
      }
    },
    {
      resolve: 'gatsby-plugin-netlify-cms',
      options: {
        modulePath: `${__dirname}/src/cms/cms.js`,
      },
    },
    {
      resolve: 'gatsby-plugin-purgecss', // purges all unused/unreferenced css rules
      options: {
        develop: true, // Activates purging in npm run develop
        purgeOnly: ['/all.sass'], // applies purging only on the bulma css file
      },
    }, // must be after other CSS plugins
    'gatsby-plugin-netlify', // make sure to keep it last in the array
  ],
  // for avoiding CORS while developing Netlify Functions locally
  // read more: https://www.gatsbyjs.org/docs/api-proxy/#advanced-proxying
  developMiddleware: app => {
    app.use(
      '/.netlify/functions/',
      proxy({
        target: 'http://localhost:9000',
        pathRewrite: {
          '/.netlify/functions/': '',
        },
      })
    )
  },
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-18 04:42:32

这很可能是因为Gatsby将profile.image字段推断为字符串而不是文件。当您启动Gatsby时,如果提供的一个或多个路径字符串未解析为文件,则会发生这种情况。请注意,Gatsby在启动后不会重新运行现有字段的类型推断,因此您需要重新启动开发服务器才能应用这些更改。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57981571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档