我正在创建一个文档站点来保存我的每个产品的DocPages。盖茨比正在将我的所有网站构建为静态页面。我有多个技术作家不断更新和创建新页面。盖茨比如何处理这个问题?每次更新内容时,我是否必须使用Gatsby重建我的整个网站?
答案 0 :(得分:1)
gatsby-source-contentful
插件使用sync API。如果您保留插件周围的.cache
和public
文件夹,则只能获取更改的条目和资源,并更新Gatsby数据。保持.cache
应该更快地建立。
依赖于您的webhook设置可能会多次触发此构建过程以解决方法,也许您可以添加延迟构建的脚本并确保只有一个构建过程正在运行。
答案 1 :(得分:0)
我知道这是一个古老的问题,但是今天我一直在努力解决这个问题,而且似乎没人在此方面发表过体贴或回答,当您重新启动gatsby development时,Gatsby v2仍会重建所有内容。如果您的构建在第一次运行时需要20分钟,那么这是不行的。我的解决方法如下。
您可以使用cache API保存数据的哈希值或updateAt信息,并且仅在缓存不匹配(数据已更新)时才调用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)
}