【问题标题】:Does Gatsby need to rebuild my entire site every time a docpage is updated?每次更新文档页面时,盖茨比是否需要重建我的整个网站?
【发布时间】:2018-01-28 05:04:18
【问题描述】:

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

【问题讨论】:

    标签: javascript contentful gatsby


    【解决方案1】:

    gatsby-source-contentful 插件使用sync API。如果您在插件周围保留.cachepublic 文件夹,则只能获取更改的条目和资产并更新盖茨比数据。保持.cache 应该构建得更快。

    取决于您的 webhook 设置,此构建过程可能会被触发多次以解决问题,也许您可​​以添加一个脚本来延迟构建并确保只有一个构建过程正在运行。

    【讨论】:

      【解决方案2】:

      我知道这是一个老问题,但我今天在这个问题上苦苦挣扎,似乎没有人给出一个像样的帖子或答案,当你重新启动 gatsby development 时,Gatsby v2 仍然会重建所有内容。如果您的构建在第一次运行时需要 20 分钟,那么这是不行的。我的解决方案如下。

      您可以使用cache 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)
        }
      

      【讨论】:

        猜你喜欢
        • 2021-01-21
        • 2021-02-07
        • 1970-01-01
        • 2020-02-02
        • 2021-04-08
        • 1970-01-01
        • 2011-07-06
        • 2020-11-12
        • 1970-01-01
        相关资源
        最近更新 更多