#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
отсутствовал узел. Спасибо за объяснение.