2

我正在使用 gatsby 构建一个非常大的网站(5k+ 页,300k+ 图像)。源数据不可靠(例如,经常缺少字段),这会导致createPage过程中出现错误。

问题是,如果单次createPage运行引发错误,则整个构建都会失败。所以有时 5k 页面构建成功,然后整个事情因为一个错误而崩溃。

我尝试将页面创建包装在 a 中try...catch,但没有任何区别:

      try {
        createPage({
          path: node.slug,
          component: path.resolve(`./src/templates/BlogPost.js`),
          context: {
            id: node.id,
          },
        });
      } catch (error) {
        console.log(error);
      }

(我还尝试在组件级别检查数据并在null不完整时返回,但createPage仍会创建一个(空白)页面,我不希望这样:我只想在数据错误时跳过该页面

所以我的问题是:如何在构建过程中处理错误/失败的页面创建,以便跳过失败的页面而不是使整个构建崩溃?

注意这几乎是这个问题的重复,但是那里的解决方案对我不起作用:如果数据不正确,我无法呈现错误页面,如果可能的话,我需要完全跳过该页面

4

1 回答 1

4

您应该为源数据明确定义 GraphQL 架构: https ://www.gatsbyjs.org/docs/schema-customization/#creating-type-definitions

这样,GraphQL 调用将不会返回错误,而是会返回null节点上缺少的字段。然后,您可以检查这些虚假值并跳过createPage调用。

例如,在我的这个主题中,我明确定义了Page类型的 GraphQL 模式:https ://github.com/LekoArts/gatsby-themes/blob/567858957ca484aef8114a7d0b8e4f14df0c8a00/themes/gatsby-theme-minimal-blog-core/gatsby-node .js#L90-L96

https://github.com/LekoArts/gatsby-themes/blob/567858957ca484aef8114a7d0b8e4f14df0c8a00/themes/gatsby-theme-minimal-blog-core/gatsby-node.js#L111-116

如果最终用户没有创建任何页面(通过在内容/页面中创建文件),查询将返回null,我可以检查:https ://github.com/LekoArts/gatsby-themes/blob/567858957ca484aef8114a7d0b8e4f14df0c8a00/themes/ gatsby-theme-minimal-blog-core/gatsby-node.js#L337-L347

于 2020-04-21T12:56:17.030 回答