Jekyll 插件中的“优先级”标志应该如何工作?

2023-12-04

我目前正在尝试为 Jekyll 开发一个插件,这将有助于使用云数对于响应式图像。当前源是在我的 Github 仓库中,稍后当/如果它有效时,我会将其变成宝石。

这个插件有两个特点:

  • 用于定义 Cloudinary 图像的 Liquid 标签,例如{% cloudinary [preset] path/to/img.jpg [attr="value"] %}
  • 一个转换器,可以选择自动将图像的标准 Markdown/Kramdown 语法转换为此 Liquid 标签:![alt text](path/to/img.jpg){:caption="caption text"}变成{% cloudinary path/to/img.jpg alt="alt text" caption="caption text" %}

目前,这两个功能都按预期工作,但它们没有“链接”。如果我在 Markdown 中使用 Liquid 标签,则会对其进行评估。如果我放置标准 Markdown 图像,它将转换为{% cloudinary … %}Liquid 标签,但该标签不被评估。

我怀疑这两个功能没有按正确的顺序运行,因此我想确保在评估 Liquid 标签之前执行 Converter。

但我还不明白如何使用优先级标志.

如果我取消注释the priority :normal我的插件中的行,然后运行bundle exec jekyll serve,我收到此错误:

$ bundle exec jekyll serve
Configuration file: /Users/nhoizey/Dropbox/Personnel/Devs/nicolas-hoizey.com/_config.yml
jekyll 3.1.6 | Error:  undefined method `priority' for Jekyll::CloudinaryTag:Class
Did you mean?  print

任何想法?

编辑(7 月 11 日):

我现在已将其拆分为插件。

该转换器仍在我的网站中_plugins文件夹:https://github.com/nhoizey/nicolas-hoizey.com/blob/52c92a38410e133890eea6044a033cb20344b971/_plugins/cloudinaryfy.rb#L26

Jekyll 并没有抱怨这个“优先”标志。

Liquid 标签现在是一个真正的自治插件 gem,名为jekyll-cloudinary: https://nhoizey.github.io/jekyll-cloudinary/

如果我在这个插件中添加“优先”标志,我仍然会收到错误:

$ bundle exec jekyll serve                                                                                 bundler: failed to load command: jekyll (/usr/local/bin/jekyll)
Bundler::GemRequireError: There was an error while trying to load the gem 'jekyll-cloudinary'.
Gem Load Error is: undefined method `priority' for Jekyll::Cloudinary::CloudinaryTag:Class
Did you mean?  print
Backtrace for gem load error is:
/usr/local/lib/ruby/gems/2.3.0/gems/jekyll-cloudinary-1.2.2/lib/jekyll/cloudinary.rb:5:in `<class:CloudinaryTag>'
/usr/local/lib/ruby/gems/2.3.0/gems/jekyll-cloudinary-1.2.2/lib/jekyll/cloudinary.rb:4:in `<module:Cloudinary>'
/usr/local/lib/ruby/gems/2.3.0/gems/jekyll-cloudinary-1.2.2/lib/jekyll/cloudinary.rb:2:in `<module:Jekyll>'
/usr/local/lib/ruby/gems/2.3.0/gems/jekyll-cloudinary-1.2.2/lib/jekyll/cloudinary.rb:1:in `<top (required)>'
/usr/local/lib/ruby/gems/2.3.0/gems/jekyll-cloudinary-1.2.2/lib/jekyll-cloudinary.rb:1:in `require'
/usr/local/lib/ruby/gems/2.3.0/gems/jekyll-cloudinary-1.2.2/lib/jekyll-cloudinary.rb:1:in `<top (required)>'
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:86:in `require'
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:86:in `block (2 levels) in require'
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:81:in `each'
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:81:in `block in require'
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:70:in `each'
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:70:in `require'
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler.rb:102:in `require'
/usr/local/lib/ruby/gems/2.3.0/gems/jekyll-3.1.6/lib/jekyll/plugin_manager.rb:34:in `require_from_bundler'
/usr/local/lib/ruby/gems/2.3.0/gems/jekyll-3.1.6/bin/jekyll:9:in `<top (required)>'
/usr/local/bin/jekyll:22:in `load'
/usr/local/bin/jekyll:22:in `<top (required)>'
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/cli/exec.rb:63:in `load'
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/cli/exec.rb:63:in `kernel_load'
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/cli/exec.rb:24:in `run'
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/cli.rb:304:in `exec'
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command'
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/vendor/thor/lib/thor.rb:359:in `dispatch'
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/vendor/thor/lib/thor/base.rb:440:in `start'
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/cli.rb:11:in `start'
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/exe/bundle:27:in `block in <top (required)>'
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/friendly_errors.rb:98:in `with_friendly_errors'
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/exe/bundle:19:in `<top (required)>'
/usr/local/bin/bundle:22:in `load'
/usr/local/bin/bundle:22:in `<main>'
Bundler Error Backtrace:

  /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:89:in `rescue in block (2 levels) in require'
  /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:85:in `block (2 levels) in require'
  /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:81:in `each'
  /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:81:in `block in require'
  /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:70:in `each'
  /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:70:in `require'
  /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler.rb:102:in `require'
  /usr/local/lib/ruby/gems/2.3.0/gems/jekyll-3.1.6/lib/jekyll/plugin_manager.rb:34:in `require_from_bundler'
  /usr/local/lib/ruby/gems/2.3.0/gems/jekyll-3.1.6/bin/jekyll:9:in `<top (required)>'
  /usr/local/bin/jekyll:22:in `load'
  /usr/local/bin/jekyll:22:in `<top (required)>'

为什么它适用于一个插件而不适用于另一个?

我怎样才能确保cloudinarify转换器插件在之前运行jekyll-cloudinary液体标签是怎么解释的?


The priority为以下子类引入了标志Jekyll::Plugin为了使插件作者能够明确向 Jekyll 提供订购信息。当新的插件子类被实例化并按优先级排序Jekyll::Site被实例化。如果你想要你的cloudfoundry要运行的插件before or after另一个插件,您可以修改其优先级,以便在处理方面它将先于其他插件。

这仅对以下子类有效Jekyll::Plugin, 包括Jekyll::Converter and Jekyll::Generator。这就是为什么它适用于您的转换器,但不适用于您的Liquid::Tag– 液体标签没有优先级的概念,因为它们不竞争。

例如,以一个具有以下内容的网站为例:类别生成器插件 and a 站点地图插件。站点地图插件作者希望确保站点地图中存在任何生成的页面(所有内容都应该在站点地图中!),因此它设置priority :low。类别生成器插件作者可能希望确保它在任何其他生成器(例如站点地图生成器)之前运行,因此它设置priority :high。这可确保类别生成器插件在站点地图插件之前运行,以便编译后的站点地图中包含类别页面。

默认优先级是:normal。按优先级降序排列,有:

  • :highest
  • :high
  • :normal
  • :low
  • :lowest
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jekyll 插件中的“优先级”标志应该如何工作? 的相关文章

  • 有没有办法获得 jekyll 中 markdown 帖子的完整路径?

    我创建了一个博客仅供我个人使用 只是为了整理自己的笔记 与正式的博客不同 在正式的博客中 您通常在写完帖子后就完成了 我会经常编辑这些帖子 所以在页脚中我想有以下内容 sublime path to posts markdown post
  • Jekyll 将每个换行符转换为换行符

    我正在使用 Jekyll 和 kramdown 来制作一个静态站点 今天我注意到每当我将同一个句子继续到新行时 Jekyll 就会插入一个 br 标记那里 以前从未发生过这种情况 由于我所有的 Markdown 文件都没有超过 80 个字符
  • 给 Jekyll 类别添加标题

    我想将我的帖子的打印类别名称转换为标题大小写 我找不到合适的液体过滤器 我尝试使用破折号和驼峰过滤器 但没有骰子 或者 我想打印 YAML frontmatter 中写入的类别名称 例如 对于包含以下内容的帖子 category Here
  • 如何确定 jekyll 是在本地运行还是在生产站点运行?

    jekyll 中有一个名为 production url 的配置参数 我找不到任何有关如何使用它的信息 理想情况下 我希望能够在运行时生成带有本地网址的永久链接serve运行时的参数和生产 urlbuild param 我怎么能这么做呢 当
  • sass 无法编译,文件不可读或找不到

    转换错误 Jekyll Converters Sass 在转换时遇到错误 ng assets css all sass 找不到或无法读取要导入的文件 1 tools tools dir 1号线 这是我每次运行 Jekyll 时都会遇到的错误
  • 如何动态更改 Jekyll _config.yml 中的变量?

    您好 我正在开发一个 Jekyll 项目 我需要在 config yml 中放置一个变量 我想从模板代码中动态更改该变量 这就是我想做的 但我无法让它发挥作用 是否有可能做到这一点 在 config yml中 my var value 在模
  • Jekyll 如何处理 _posts/subdir 中的帖子

    Jekyll Bootstrap 项目在目录中有一篇示例博客文章 posts core samples 我假设 子目录中的帖子 文件 的处理方式与根目录中的帖子相同 它是否正确 如果是这样 我将添加一个 stage 子目录 将其排除 这样我
  • 为 Jekyll 服务时参数数量错误(1 对 2)

    全新安装 Jekyll 和 Octopress 启动服务器时 它会产生 Homes MacBook Pro octopress home jekyll serve Configuration file Users home octopres
  • 将 Jekyll 添加到现有网站

    我有一个简单的网站 并尝试在新文件夹中添加 Jekyll 博客blog因此我已经跑了jekyll new blog在文件夹中 path 但是当我运行命令时jekyll build in path我有这些错误 jekyll build Con
  • 为什么我在安装 gem 时收到“权限被拒绝”错误?

    我正在尝试安装 Jekyll 运行后gem install jekyll我收到此错误 ERROR While executing gem Errno EACCES Permission denied usr local lib ruby g
  • 如何使用 Liquid 对 Jekyll 的数据项进行分页

    您好 我正在尝试访问上一个和下一个数组中的元素 确切地说 我想访问页面的上一个和下一个 url 这就是我到目前为止所做的 谢谢 assign page venue site data venues array where venueID p
  • 无法在 Windows 10 上连接到 Jekyll 的 localhost:4000

    我正在尝试在 Windows 10 计算机上设置 Jekyll 但无法连接到由以下人员创建的网站 127 0 0 1 4000 jekyll serve or bundle exec jekyll serve 我已遵循 Julian Thi
  • Jekyll - 如何在根目录中创建页面?

    我正在使用 Jekyll 创建页面 文档建议 Jekyll 可以选择在根目录中创建页面 或为新页面创建新目录 From http jekyllrb com docs pages http jekyllrb com docs pages 页面
  • 从 WordPress 主题创建 Octopress 主题

    我已经使用 wordpress 一段时间了 想尝试一些不同的东西 进入我对静态网站生成世界的发现 现在我关注的是 Octopress 我知道它是基于 jekyll 构建的 在我开始接触 ruby 之前 我想知道是否有可能翻译我的curren
  • haml 文件中的 yaml 前面内容

    我正在尝试使用Haml Jekyll 扩展 https github com codegram haml jekyll extension只是我不明白如何包含 yaml 前面的内容 我有以下内容 user hello html title
  • 在 Jekyll 中,如何更改将文件名转换为博客文章标题的大小写规则?

    我正在尝试更改 Jekyll 中博客文章标题的大小写 而不必每次都在 yaml 标题字段中键入它 默认情况下 jekyll 转换文件2016 02 22 my blog title标题 我的博客标题 我希望它是 我的博客标题 我注意到我可以
  • 无需 root 即可安装 Jekyll

    我想在共享服务器上建立一个 jekyll 博客 当我尝试安装 Jekyll 时 我收到 您没有写入权限 如何在没有 root 或 sudo 的情况下解决这个问题 更多详情 我在共享服务器上有空间 但没有 root 访问权限 我无法安装 Ru
  • 用正则表达式重写YAML frontmatter

    我想使用 Jekyll 将我的 WordPress 网站转换为 GitHub 上的静态网站 我使用了一个插件 将我的 62 篇帖子以 Markdown 形式导出到 GitHub 我现在在每个文件的开头都有这些带有额外 frontmatter
  • 您可以使用 Jekyll 的 _includes 文件夹中的子目录吗?

    我的计划是在 includes目录 包括 页脚 包括 英雄 includes cta etc 当我引用那个时 include footers footer1 html 我收到以下错误 Liquid Exception Included fi
  • 如何替换 Jekyll 中最后一个

    标签

    在我的index html 页面中 我想在post excerpt 之后附加 理想化的方式是使用代码 post excerpt replace last 但是过滤器replace last似乎没有定义 那么我怎样才能在 jekyll 中做到

随机推荐