我是gatsby的新手,正尝试使用不同的模板以编程方式创建页面,但我为此感到困惑。
这是我的gatsby节点文件,可以很好地创建团队成员页面,但是当我想使用位于相同文件夹/ templates的新模板来创建博客帖子时,就会出现问题
const path = require(`path`)
const { createFilePath } = require(`gatsby-source-filesystem`)
exports.onCreateNode = ({ node, getNode, actions }) => {
const { createNodeField } = actions
if (node.internal.type === `MarkdownRemark`) {
const slug = createFilePath({ node, getNode, basePath: `pages` })
createNodeField({
node,
name: `slug`,
value: slug,
})
}
}
exports.createPages = async ({ graphql, actions }) => {
const { createPage } = actions
const result = await graphql(`
query {
allMarkdownRemark {
edges {
node {
fields {
slug
}
}
}
}
}
`)
result.data.allMarkdownRemark.edges.forEach(({ node }) => {
createPage({
path: node.fields.slug,
component: path.resolve(`./src/templates/member-info.js`),
context: {
slug: node.fields.slug,
},
})
})
}
我尝试了不同的方法,但无法找到解决方案。 谢谢!
答案 0 :(得分:0)
大多数幼稚的方法是使用其他模板组件来调用createPage
。也许更健壮的方法是在frontmatter中定义模板名称,并使用它来动态构建各个组件的路径,例如:
some markdown file
---
template: member-info
---
gatsby-node.js
exports.createPages = async ({ graphql, actions }) => {
const { createPage } = actions
const result = await graphql(`
query {
allMarkdownRemark {
edges {
node {
frontmatter {
template
}
fields {
slug
}
}
}
}
}
`)
result.data.allMarkdownRemark.edges.forEach(({ node }) => {
createPage({
path: node.fields.slug,
component: path.resolve(`./src/templates/${template}.js`),
context: {
slug: node.fields.slug,
},
})
})
}