有没有办法在Netlify部署之间更新文件?

问题描述

我在Netlify上有一个建有11ty的网站,其中某些数据存储在Airtable中。使用Airtable,我的客户可以修改此网站上的某些信息(照片和一些其他信息),然后在仍处于Airtable中的同时,按下按钮,该按钮发送一个Webhook,供Netlify使用来自网站的最新信息来重建网站。飞机场。

对于图像,我在每次构建时都有一个Gulp任务:

  • 查看“图像” Airtable表中的所有记录(它们的API为我提供文件名和URL),并以JSON格式的变量列出它们。
  • 然后,它将此列表与上次构建期间创建的列表进行比较,并将其存储在文件(portfoliocache.json)
  • 如果这些列表相同,则意味着自上次构建以来,Airtable中的图像没有更改,因此不执行任何操作,节省带宽。
  • 如果这些列表不同,它将删除我的“图像”文件夹中的所有文件,从Airtable下载它们,然后对其进行优化,将新图像放在我的“图像”文件夹中。 portfoliocache.json被新列表覆盖。 这会花费一些时间并消耗一些Netlify生成时间,因此,只有在更改了Airtable映像的情况下,我才这样做。

这在我的本地Node.js环境中效果很好,但是由于Netlify使用Git存储库作为其源,因此每次都使用相同的PortfolioCache.json和相同的“ images”文件夹,因此我的所有图像都可以在以下位置重新下载每个Netlify版本。

有没有办法在Netlify构建期间更新和保存我的portfoliocache和“ images”文件夹,以便下一个构建具有最新的图像列表?也许有一种在构建过程中更新Git存储库中文件方法

不确定在此处显示我的代码是否相关,但如有需要,我会很乐意。

解决方法

不要在存储库中存储文件和缓存

我认为将缓存文件和图像提交到存储库不是一个好主意。首先,它实际上并不属于该目录,因为高速缓存不应该是存储库的一部分,并且在存储库中进行自动提交会使您的提交历史变得混乱。从实际的角度来看,这甚至可能导致无限循环-netlify构建会更改存储库,从而触发重建等等。

此外,您的方法无法像在您的本地环境中那样工作。 Netlify对每个构建都使用一个干净的虚拟环境,因此上一个构建中的images文件夹在下一个构建中将永远不存在。

使用构建插件

您的构建步骤似乎正在起作用,唯一的问题是,对于常规的netlify构建,每次处理所有图像都花费了很长时间,从而耗费了许多构建时间。在这种情况下,为什么不将缓存移至netlify build plugin?查看用于创建自己的插件的文档,其中包括cache utility。您可以使用它来将图像信息存储在此缓存中,并将其保留在两次构建之间。甚至将已处理的图像缓存在那里,只提取缓存中尚不存在的图像。

将图像处理与构建步骤分开

另一种解决方案是将图像处理和构建步骤完全分开,从而使您可以将处理后的图像存储在存储库中。例如,应该可以使用Github ActionsZapier integration for Airtable + Github

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...