24

我正在使用 Gatsbyjs 和 NetlifyCMS 建立一个网站。我已经开始使用这个启动器https://github.com/AustinGreen/gatsby-starter-netlify-cms,我现在正在尝试自定义它。

我想在 markdown 文件的 frontmatter 中使用自定义变量,如下所示:

---
templateKey: mirror
nazev: Černobílá
title: Black and White
cena: '2700'
price: '108'
thumbnail: /img/img_1659.jpeg
---

我想用 GraphQL 访问这些数据。我使用 gatsby-source-filesystem 和 gatsby-transform-remark。这是我的查询:

  {
  allMarkdownRemark {
    edges {
      node {
        frontmatter {
          templateKey
          nazev
          title
          cena
          price
        }
      }
    }
  }
}

我无法让 GraphQL 读取我自己的变量,它只识别titletemplateKey(那些已经在启动器中使用的变量)。我收到此错误:

{
  "errors": [
    {
      "message": "Cannot query field \"nazev\" on type \"frontmatter_2\".",
      "locations": [
        {
          "line": 7,
          "column": 11
        }
      ]
    },
    {
      "message": "Cannot query field \"cena\" on type \"frontmatter_2\".",
      "locations": [
        {
          "line": 9,
          "column": 11
        }
      ]
    },
    {
      "message": "Cannot query field \"price\" on type \"frontmatter_2\". Did you mean \"pricing\"?",
      "locations": [
        {
          "line": 10,
          "column": 11
        }
      ]
    }
  ]
}

我已经搜索了几天,但一无所获。有人会帮我吗?

4

2 回答 2

41

解决了!

问题是我的 markdown 文件的 frontmatter 中新添加的属性没有显示在我的 GraphQL 中。

我所要做的就是使用“gatsby-develop”重新启动服务器。

于 2018-01-18T21:42:48.097 回答
2

一些可能有助于您预测未来类似问题的背景信息

gatsby-transformer-remark并且所有其他依赖于 GraphQL 查询的插件只能在 GraphQL 查询运行时读取新添加的变量。

在 Gatsby 中,GraphQL 查询在开发服务器启动时运行一次。如果您在仍处于活动状态时更改代码,则不会刷新查询gatsby develop。您可以通过重新启动来再次运行 GraphQL 查询gatsby develop

Gatsby 文档有自己的Gatsby 构建过程条目,显示了查询的确切运行时间:

success open and validate gatsby-configs - 0.051 s
// ...
success onPostBootstrap - 0.130 s
⠀
info bootstrap finished - 3.674 s
⠀
success run static queries - 0.057 s — 3/3 89.08 queries/second  // GraphQL queries here
success run page queries - 0.033 s — 5/5 347.81 queries/second   // GraphQL queries here
success start webpack server - 1.707 s — 1/1 6.06 pages/second

作为我从经验中学到的经验法则,如果您想知道为什么您的代码更改不是热重载

  • 刷新浏览器。
  • 如果这不起作用,请重新启动gatsby develop.
  • 如果这不起作用,请运行gatsby clean,清除浏览器的站点缓存,然后运行gatsby develop
  • 如果这不起作用,您几乎可以100% 确定您犯了一个错误。
于 2020-01-03T00:22:21.790 回答