Gatsby:如何克隆具有新类型的节点?

时间:2018-12-05 19:07:16

标签: gatsby

在我的博客中,我有来自两个来源的博客文章数据,旧的json文件(-> PostJson GraphQL节点)和新的.md文件(-> MarkdownRemark节点)。它们都有相同的数据,但键/结构不同。

为了简化页面的创建,我想用新的节点类型BlogPost“包装”它们中的每一个,它们的结构与MarkdownRemark相同。有简单的方法吗?

使用伪代码:

if(type == MarkdownRemark) cloneNodeWithType({parent: node, type: "BlogPost", fields: {..node, ..node.fields}) else if (type==PostJson) createNode({parent: node, type: "BlogPost", fields: {slug: node.permalink, html: node.content, ...})

要克隆该节点,我想我需要做(对于Remark节点):

createNode({ node: { id: "str", parent: node, internal: { mediaType: "text/html", type: "ContentPage", content: node.content, contentDigest: node.contentDigest }, fields: { ..node.fields } }}) 对吧?

所以: 1.这是解决问题的好方法吗? 2.如何克隆节点?

非常感谢!

1 个答案:

答案 0 :(得分:0)

这是正确的并且可以工作,但是还有一个挑战-插件通过Gatsby的setFieldsOnGraphQLNodeType向节点添加了额外的“动态”字段,因为1)这些可能在onCreateNode上还没有出现,并且2)这些通常不是值,而是诸如Remarks' html()excerpt(pruneLength: ...)之类的函数。这些只需复制和粘贴(或import and reuse as I did)。