我正在创建一个文档站点来保存我的每个产品的DocPages。盖茨比正在将我的所有网站构建为静态页面。我有多个技术作家,他们不断更新和创建新页面。盖茨比是如何处理的?每次更新内容时,我都必须使用 Gatsby 重建我的整个网站吗?
gatsby-source-contentful
插件使用同步API。如果您保留.cache
和public
插件周围的文件夹将只能获取更改的条目和资产并更新盖茨比数据。通过保持.cache
应该更快地建立。
取决于你 Webhook 安装程序 此生成过程可能会触发多次,以解决以下解决方法:也许可以添加一个延迟生成过程的脚本,并确保只有一个生成过程正在运行。
我知道这是一个老问题,但我今天为此苦苦挣扎,似乎没有人给出一个像样的帖子或答案,盖茨比 v2 仍然重建一切当你重新启动盖茨比开发时。如果您的构建在第一次运行时需要 20 分钟,这是不行的。我的解决方案如下。
您可以使用缓存 API 保存哈希或更新数据的信息,并且仅在缓存不匹配(数据已更新(时才调用 createPage 操作
这是我在我的项目中的做法:
exports.createPages = async ({ actions: { createPage }, graphql, cache }) => {
const results = await graphql(`
query GetAllCars {
myNamespaceFromGraphqlSource {
allCars {
id
updatedAt
}
}
}
`);
const createDetailsPage = async (car) => {
const carCache = await cache.get(car.id);
if(carCache != car.updatedAt) {
createPage({
path: `/car_details/${car.id}/`,
component: require.resolve("./src/templates/details.js"),
context: {
id: car.id,
},
});
await cache.set(car.id, car.updatedAt);
}
}
for(let i=0; i < results.data.myNamespaceFromGraphqlSource.allCars.length; i++ ) {
const car = results.data.myNamespaceFromGraphqlSource.allCars[i];
await createDetailsPage(car)
}