错误:名称为“AuthorYaml”的类型不存在 - gatsby-casper starter

Posted

技术标签:

【中文标题】错误:名称为“AuthorYaml”的类型不存在 - gatsby-casper starter【英文标题】:Error: Type with name "AuthorYaml" does not exists - gatsby-casper starter 【发布时间】:2021-10-23 12:52:04 【问题描述】:

我正在尝试基于 gatsby-casper starter 构建一个 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】:

嗯...那个启动器 (gatsby-casper) 在 gatsby-node.js line 105 中引用了 AuthorYaml

  allAuthorYaml 
    edges 
      node 
        id
      
    

因此,如果您尚未定义该节点,您的 GraphQL 查询将无法运行,因此代码会中断。

拉更多线程,allAuthorsYamlgatsby-transformer-yaml创建的节点,存在于gatsby-config.js(line 64)中:

'gatsby-transformer-yaml',

并映射到同一gatsby-config.js文件的line 11中:

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

这意味着您正在从 markdown frontmatter 中的作者字段创建一个 AuthorYaml 节点。

因此,如果您的降价 frontmatter 不包含作者参考,您的代码将会中断。它可以通过在 markdown 文件中设置正确的作者来轻松修复,或者只需从 gatsby-node.js 中删除 allAuthorYaml 查询节点以及对它们的所有相关引用,例如:

  // 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,
      ,
    );
  );
;

来自line 188 来自gatsby-node.js 文件。

这同样适用于authorTemplate,因为在authorTemplate 查询也会失败的上下文中,您不会传递任何作者。

【讨论】:

问题是gatsby-node.jsgatsby-config.js 在我克隆的本地副本中非常不同。当我克隆 git repo 时,我能够顺利编译所有内容。它没有缺少 allAuthorsYaml 节点。谢谢你的解释。

以上是关于错误:名称为“AuthorYaml”的类型不存在 - gatsby-casper starter的主要内容,如果未能解决你的问题,请参考以下文章

错误“名称空间'System.Web'中不存在类型或名称空间名称'Script'”背后是不是有解释

错误 CS0234 名称空间“MvvmCross”中不存在类型或名称空间名称“Platforms”(您是不是缺少程序集引用?)

Typescript 未检测到声明“d.ts”文件中不存在的类型名称的错误

错误 CS0234:命名空间“Microsoft”中不存在类型或命名空间名称“AspNetCore”(您是不是缺少程序集引用?)

错误 CS0234:命名空间“UnityEditor”中不存在类型或命名空间名称“iOS”。您是不是缺少程序集参考?

错误 CS0234 命名空间“Xamarin.Forms.Platform”中不存在类型或命名空间名称“Android”