jekyll - 仅在第一次运行时调用 Jekyll 生成器插件,而不是在重新生成时调用
问题描述
我为我的 Jekyll 网站编写了一个生成器插件。它发出一个 API 请求来收集一些必要的数据来帮助构建。
我--livereload
在运行jekyll serve
本地开发时使用。每次我保存文件并重新生成站点时,似乎都会调用生成器。这使用了我的生成器中发出的大量 API 请求。
我只需要发出一次 API 请求。有没有办法让生成器知道它被调用了多少次,这样我就可以运行一次而不是在后续的世代中运行它?
这是我的生成器插件的总体印象:
class CloudinaryContent < Jekyll::Generator
safe true
def fetch(uri, env)
# Make requests
end
# Fetch data before generating site
def generate(site)
require 'uri'
require 'net/https'
require 'json'
# fetch data and store in global
# variable for other plugins to use
$site_data = fetch()
end
end
这类似于避免在 Jekyll Ruby 插件中重复调用 API,除了我在生成器中发出 API 请求,并且我只想在第一次调用生成器时调用生成器jekyll serve
,而不是在本地开发期间文件更改时的后续重新加载期间.
解决方案
我设法实现了我的目标,但不是以一种优雅的方式。我添加了一个名为的计数器变量,它在每次调用生成器时@render_count
开始并递减。1
我添加了一个条件来检查计数器是否低于1
,如果条件通过则立即返回。这是一个示例:
def generate(site)
if (!defined?@render_count)
@render_count = 1
end
if @render_count < 1
Jekyll.logger.info('already fetched data')
return
end
# Perform business logic, set global variables
...
Jekyll.logger.info('Data fetched successfully.')
@render_count = @render_count - 1
end
我也尝试使用:pre-render
hook,但它的行为与 Generator 插件过于相似,因为它在每次重新渲染时都会被调用。
推荐阅读
- node.js - Puppeteer 在本地服务器上正确地从谷歌刮取新闻,但在 heroku 中没有
- python - 如果 y_test 数据是预测结果,我怎样才能看到实际结果?
- next.js - Gloabl 样式不适用于其他页面(Next.JS)?
- delphi - TObjectList 和析构函数自定义类
- reactjs - redux 状态更改不会触发重新渲染
- typo3 - 如何为 extbase 操作链接创建 cHash
- java - 面临使用 Natty 库将字符串转换为日期的问题
- r - 表作为基于 R 闪亮中的用户输入的输出
- javascript - 在 React 中将数据从一个函数传递到另一个函数
- php - 使用 PHP XML Expat Parser 解析 XML