每次更新文档页面时,Gatsby是否需要重建我的整个网站?

时间:2018-01-28 05:04:18

标签: javascript contentful gatsby

我正在创建一个文档站点来保存我的每个产品的DocPages。盖茨比正在将我的所有网站构建为静态页面。我有多个技术作家不断更新和创建新页面。盖茨比如何处理这个问题?每次更新内容时,我是否必须使用Gatsby重建我的整个网站?

2 个答案:

答案 0 :(得分:1)

gatsby-source-contentful插件使用sync API。如果您保留插件周围的.cachepublic文件夹,则只能获取更改的条目和资源,并更新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)
  }