Gatsby build/createPages:错误处理



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

问题是,如果一次createPage运行引发错误,整个构建就会失败。因此,有时5k页面构建成功,然后整个过程因为一个错误而崩溃。

我试着用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仍然会创建一个(空白(页面,我不希望这样:如果数据不好,我只希望跳过该页面(

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

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

您应该为源数据显式定义GraphQL模式:https://www.gatsbyjs.org/docs/schema-customization/#creating-类型定义

这样,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

最新更新