Вы можете использовать createNodeField
на любом типе узлов, а не просто замечание по уценке.
Если вы установите gatsby-config.js
, как показано ниже:
{
resolve: `gatsby-source-filesystem`,
options: {
path: `${__dirname}/content/meta`, <-- folder name is used to create node type name, i.e `MetaJson`
name: `meta`, <-- doesn't affect json node's type name
},
},
`gatsby-transformer-json`,
Затем вы можете преобразоватьих в gatsby-node.js
точно так же, как вы делаете это с узлом MarkdownRemark.
exports.onCreateNode = ({ node, actions }) => {
const { createNodeField } = actions
if (node.internal.type === `MetaJson`) {
const relativePath = ...
createNodeField({
node,
name: `foo`,
value: relativePath,
})
}
}
Вы также можете передать дополнительные опции в gatsby-transformer-json
, чтобы иметь более точный контроль зернаВнутреннее имя типа узлов json.
И точно так же, как с уценкой, преобразованной gatsby-transformer-remark
, jsons, преобразованный gatsby-transformer-json
, также присоединяет дочерний узел к своему родительскому узлу File:
{
file( sourceInstanceName: { eq: "meta" } ) {
dir
childMetaJson {
fields {
foo
}
}
}
}