问题描述
我在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 Actions或Zapier integration for Airtable + Github。