我有我的博客文章在一个独立的回购网站的结构。
这将站点代码的提交与内容更新的提交分开。人们还可以在博客文章中提交请求纠正错误的请求。
当我第一次运行下载-git-repo时,我使用的是NPM包gatsby build,在GraphQL尝试使用它们之前,似乎没有加载这些帖子。
GraphQLError: Cannot query field "allMarkdownRemark" on type "Query".
第二次运行gatsby build不会返回错误。
gatsby-node.js中的第3-5行是我导入博客帖子回购的代码。
我如何编写这段代码,以便在GraphQL查找这些帖子之前加载它们?
const path = require('path')
const { createFilePath, createFileNode } = require(`gatsby-source-filesystem`)
const download = require('download-git-repo')
download('jastuccio/blog-posts', 'src/pages/blog-posts', function(err) {
console.log(err ? 'Error' : 'Success')
})
exports.createPages = ({ actions, graphql }) => {
const { createPage } = actions
const blogPostTemplate = path.resolve(`src/templates/blog-post.js`)
return new Promise((resolve, reject) => {
resolve(
graphql(`
{
allMarkdownRemark(
sort: { order: DESC, fields: [frontmatter___date] }
limit: 1000
) {
edges {
node {
fields {
slug
}
frontmatter {
title
}
}
}
}
}
`).then(result => {
if (result.errors) {
console.log(result.errors)
return reject(result.errors)
}
const blogTemplate = path.resolve('./src/templates/blog-post.js')
result.data.allMarkdownRemark.edges.forEach(({ node }) => {
createPage({
path: node.fields.slug,
component: blogTemplate,
context: {
slug: node.fields.slug,
}, // additional data can be passed via context
})
})
return
})
)
})
}
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,
})
}
}发布于 2019-02-02 07:10:14
也许‘下载’是异步发生的,所以当盖茨比运行时,博客数据还没有出现吗?
您应该在钩子中下载回购。这发生在盖茨比开始从插件读取配置之前&站点的构建数据。
也许就像
// gatsby-node.js
exports.onPreBootstrap = () => new Promise(( res, rej ) => {
download(‘...’, ‘...’, (err) => {
if (err) rej(err);
else res();
})
})https://stackoverflow.com/questions/54488955
复制相似问题