Ошибка: Тип с именем «AuthorYaml» не существует — стартер Гэтсби-каспера

#javascript #node.js #reactjs #typeerror #gatsby

Вопрос:

Я пытаюсь создать веб-сайт gatsby на основе стартера Гэтсби-Каспера, но я получаю трудную для отладки ошибку, связанную со схемой graphql. Ошибка, которую я получаю, заключается в следующем:

 Error: Type with name "AuthorYaml" does not exists

- TypeStorage.js:44 SchemaComposer.get
[Physicc-blog]/[graphql-compose]/lib/TypeStorage.js:44:13

- TypeMapper.js:585 ThunkComposer._thunk
[Physicc-blog]/[graphql-compose]/lib/TypeMapper.js:585:34

- ThunkComposer.js:20 ThunkComposer.get ofType [as ofType]
[Physicc-blog]/[graphql-compose]/lib/ThunkComposer.js:20:34

- ThunkComposer.js:46 ThunkComposer.getType
[Physicc-blog]/[graphql-compose]/lib/ThunkComposer.js:46:17

- ListComposer.js:22 ListComposer.getType
[Physicc-blog]/[graphql-compose]/lib/ListComposer.js:22:49

- ObjectTypeComposer.js:348 ObjectTypeComposer.getFieldConfig
[Physicc-blog]/[graphql-compose]/lib/ObjectTypeComposer.js:348:18

- index.js:220 forEach
[Physicc-blog]/[gatsby]/src/schema/extensions/index.js:220:48

- Array.forEach

- index.js:215 forEach
[Physicc-blog]/[gatsby]/src/schema/extensions/index.js:215:8

- Array.forEach

- index.js:211 processFieldExtensions
[Physicc-blog]/[gatsby]/src/schema/extensions/index.js:211:32

- schema.js:226 processTypeComposer
[Physicc-blog]/[gatsby]/src/schema/schema.js:226:11

- schema.js:200 map
[Physicc-blog]/[gatsby]/src/schema/schema.js:200:7

- Array.map

- schema.js:199 updateSchemaComposer
[Physicc-blog]/[gatsby]/src/schema/schema.js:199:50

- schema.js:64 buildSchema
[Physicc-blog]/[gatsby]/src/schema/schema.js:64:3
 

Я использовал

 gatsby new my-gatsby-project https://github.com/scttcper/gatsby-casper
 

для инициализации проекта. Я не могу понять, почему возникает эта ошибка.

Ответ №1:

Ну… на этого стартера (Гэтсби-Каспера) есть ссылка AuthorYaml gatsby-node.js в строке 105:

   allAuthorYaml {
    edges {
      node {
        id
      }
    }
 

Поэтому, если вы не определили этот узел, ваш запрос GraphQL не сможет выполняться, следовательно, код нарушается.

Вытягивая больше нити, allAuthorsYaml является узлом , созданным gatsby-transformer-yaml , присутствующим в gatsby-config.js (строка 64):

 'gatsby-transformer-yaml',
 

И отображается в строке 11 того же gatsby-config.js файла:

   mapping: {
    'MarkdownRemark.frontmatter.author': 'AuthorYaml',
  },
 

Это означает, что вы создаете AuthorYaml узел из поля автор в своей уценке frontmatter .

Таким образом, если ваша уценка frontmatter не содержит ссылки на автора, ваш код будет нарушен. Это можно легко исправить, установив соответствующего автора в файле уценки или просто удалив allAuthorYaml узел запроса из gatsby-node.js и все связанные с ними ссылки, такие как:

   // Create author pages
  const authorTemplate = path.resolve('./src/templates/author.tsx');
  result.data.allAuthorYaml.edges.forEach(edge => {
    createPage({
      path: `/author/${_.kebabCase(edge.node.id)}/`,
      component: authorTemplate,
      context: {
        author: edge.node.id,
      },
    });
  });
};
 

Из строки 188 из gatsby-node.js файла.

То же самое относится и к authorTemplate тому, что, поскольку вы не будете передавать какого-либо автора в контексте, ваш authorTemplate запрос также завершится неудачей.

Комментарии:

1. Дело в том, что gatsby-node.js и gatsby-config.js в моей клонированной локальной копии они очень разные. Когда я клонировал репозиторий git вместо этого, я смог скомпилировать все гладко. В нем не allAuthorsYaml отсутствовал узел. Спасибо за объяснение.