Gulp 是否有办法在Netlify部署之间更新文件?

z31licg0  于 2022-12-08  发布在  Gulp
关注(0)|答案(1)|浏览(193)

我在Netlify上用11ty建了一个网站,它的某些数据存储在Airtable中。使用Airtable,我的客户可以修改这个网站上的某些信息(照片和一些其他信息),然后,当仍然在Airtable中时,按下一个按钮,它会发送一个webhook给Netlify,让Netlify使用Airtable中的最新信息重建网站。
对于图像,我有一个Gulp任务,在每次构建时:

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

这在我的本地Node.js环境中运行得很好,但是由于Netlify使用Git存储库作为其源代码,它每次都使用相同的portfolioCache.json和相同的“images”文件夹,因此我的所有图像在每次Netlify构建时都会重新下载。
有没有办法在Netlify构建过程中更新并保存我的portfoliocache和“images”文件夹,以便下次构建时有一个最新的图像列表?也许有办法在构建过程中更新我的Git仓库中的文件?
不确定是否显示我的代码将在这里相关,但我很乐意,如果需要的话。

kxeu7u2r

kxeu7u2r1#

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

我不认为把缓存文件和图片提交到仓库是个好主意。首先,缓存文件和图片并不属于仓库,因为缓存不应该是仓库的一部分,在仓库中自动提交会扰乱提交历史。从实践的Angular 来看,这甚至会导致无限循环-netlify构建会改变仓库,从而触发重建等等。
除此之外,您的方法不能像在本地环境中那样工作。Netlify为每个构建都使用一个干净的虚拟环境,因此上一个构建的图像文件夹在下一个构建中永远不会存在。

使用构建插件

你的构建步骤看起来是有效的,唯一的问题是每次处理所有的图像对于常规的netlify构建来说花费太长的时间,消耗了很多构建时间。在这种情况下,为什么不把缓存移到netlify build plugin呢?看一下创建你自己的插件的文档,它包含了一个缓存工具,你可以用它把图像信息保存在缓存中,只提取该高速缓存中还不存在的图像。

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

另一个解决方案是将图像处理和构建步骤完全分离,允许您将处理后的图像存储在存储库中,例如,使用Github ActionsZapier integration for Airtable + Github应该可以实现这一点。

相关问题