Ruby Jekyll:如何在GitHub页面上使用自定义插件?

Ruby Jekyll:如何在GitHub页面上使用自定义插件?,ruby,jekyll,github-pages,Ruby,Jekyll,Github Pages,事实证明,定制ruby插件无法在GitHub页面上工作,因为存在一些问题 我正试图将一个插件()添加到我的Jekyll项目的\u plugins文件夹中,但是当我将它部署到GitHub时,它被忽略了 问题:有办法解决这个问题吗?有人找到解决办法了吗 注意:显然,我可以在本地生成html文件并将其提交到我的存储库。但这不是我想要的。您需要这些插件的替代品 如“”所述: Github页面上的Ruby插件执行被完全禁用: GitHub页面上的插件GitHub页面由Jekyll提供支持。 但是,所有页面

事实证明,定制ruby插件无法在GitHub页面上工作,因为存在一些问题

我正试图将一个插件()添加到我的Jekyll项目的
\u plugins
文件夹中,但是当我将它部署到GitHub时,它被忽略了

问题:有办法解决这个问题吗?有人找到解决办法了吗


注意:显然,我可以在本地生成html文件并将其提交到我的存储库。但这不是我想要的。

您需要这些插件的替代品

如“”所述:

Github页面上的Ruby插件执行被完全禁用:

GitHub页面上的插件GitHub页面由Jekyll提供支持。
但是,所有页面站点都是使用
-safe
选项生成的,以出于安全原因禁用自定义插件。不幸的是,这意味着如果要部署到GitHub页面,插件将无法工作

您仍然可以使用GitHub页面发布站点,但是您需要在本地转换站点,并将生成的静态文件推送到GitHub存储库,而不是Jekyll源文件

我知道你提到:

显然,我可以在本地生成html文件并将它们提交到我的存储库。但那不是我想要的

尽管如此,在您的案例中还是要考虑像这样的静态网站生成器(与GitHub页面兼容)

加上:

雨果有的概念,很像《杰基尔》中的“液体标签”。
与Jekyll一样,您也可以创建自定义短代码标记

然而,主要的区别在于,在Hugo中,您可以创建它们,而无需实际编写Go代码-请参阅。
因为Hugo使用Go模板来呈现页面,所以短代码可以使用其中的任何和所有Go模板函数,以及添加到帮助中的一系列自定义Hugo函数。这可以说比液体模板解决方案更强大,但仍然是一个可以轻松动态更新的模板文件

另外,雨果也是

2018年11月更新:使用,此(参考):

类似于Jekyll允许您在Markdown中使用液体标签的方式

没有插件 阅读时间脚本不需要插件。我已经创建了一个脚本集合,无需使用插件即可添加这些脚本。你可以找到他们。是其中之一

您可以在这里找到代码:

{% capture words %}
{{ content | number_of_words | minus: 180 }}
{% endcapture %}
{% unless words contains '-' %}
{{ words | plus: 180 | divided_by: 180 | append: ' minutes to read' }}
{% endunless %}
请注意,此代码只包含Liquid,不包含Ruby。因此,它可以用于您的布局或包含(无插件)

优化脚本 假设你有这样的东西:

<p>lorem ipsum</p>
<p>lorem ipsum</p>
<code>lorem ipsum</code>
<p>lorem ipsum</p>
<code>lorem ipsum</code>
<p>lorem ipsum</p>
{% assign preprocessed_content=post.content | replace: '<p>', '__p__' %}
{% assign preprocessed_content=preprocessed_content | replace: '</p>', '__/p__' %}
{% assign truncated_content=preprocessed_content | strip_html %}
{% assign cleaned_content=truncated_content | replace: '__p__', '<p>' %}
{% assign cleaned_content=cleaned_content | replace: '__/p__', '</p>' %}
然后您可以像这样删除上面的代码块:

<p>lorem ipsum</p>
<p>lorem ipsum</p>
<code>lorem ipsum</code>
<p>lorem ipsum</p>
<code>lorem ipsum</code>
<p>lorem ipsum</p>
{% assign preprocessed_content=post.content | replace: '<p>', '__p__' %}
{% assign preprocessed_content=preprocessed_content | replace: '</p>', '__/p__' %}
{% assign truncated_content=preprocessed_content | strip_html %}
{% assign cleaned_content=truncated_content | replace: '__p__', '<p>' %}
{% assign cleaned_content=cleaned_content | replace: '__/p__', '</p>' %}
{%assign preprocessed_content=post.content | replace:“”,“\uu p_uuuuuu”}
{%assign preprocessed_content=preprocessed_content | replace:“

”,“\uuuuu/p\uuu%” {%assign truncated_content=预处理的_content | strip_html%} {%assign cleaned_content=截断的_content | replace:'uu p_uu',''%} {%assign cleaned_content=cleaned_content | replace:'uuu/p_uu','

'%}
当然,这可以扩展到支持更多标记

无论如何都要使用插件
如果你真的想使用插件,你可以让你的本地机器或CloudCannon构建你的站点,并将结果推送到Github页面。另请参见:

如果您想使用自定义插件,您必须在本地“构建”您的站点,然后将其作为HTML、CSS和其他文件(不再是标记文件)的集合部署到
gh页面
分支。您可能希望尝试使用命令行来帮助您自动完成这一切。只需安装它,然后运行:

$ jgd

网站将被打包,然后部署到回购协议的
gh页面
分支。更多信息请参阅我的这篇博文:

如果您不知道本地解决方案是什么,因为它很耗时,您可以自动执行一个过程,这样当您将更改推送到master时,它将自动在本地构建您的网站,并将更改推送到
gh页面
分支

您可以通过在repo(
.git/hooks/pre-push
)中创建一个包含以下内容的
预推
钩子来实现这一点:

#/垃圾箱/垃圾箱
#如果以下脚本中的任何命令失败,则退出并出错
set-e
#设置将在父文件夹中创建的文件夹的名称
#您的回购文件夹的文件夹,该文件夹将临时
#保存生成的内容。
temp_folder=“_gh-pages-temp”
#确保我们的主代码只有在推送主分支时才能运行
如果[“$(git rev parse——符号全名——abbrev ref HEAD)”=“master”];然后
#存储来自主分支的最后一条提交消息
最后一条消息=$(git show-s--格式=%s master)
#建立我们的杰基尔网站
杰基尔大厦
#在临时文件夹中移动生成的站点
mv_站点../${temp_文件夹}
#签出gh pages分支并清理其内容
git签出页面
rm-rf*
#从临时文件夹复制网站内容并删除临时文件夹
cp-r../${temp_folder}/*。
rm-rf../${temp_folder}
#提交并将生成的站点推送到GitHub
git添加-A
git commit-m“构建\`$last\u消息\`”
git推送
#回到主分支
切换到主分支
其他的
echo“不是主分支。正在跳过生成”
fi

有关更多详细信息,请参见。

如果您想让Jekyll站点像本地一样运行,例如让自定义插件正常工作,这里有一种非常方便的方法来构建Jekyll站点并将其部署到Github页面


你可以使用像Netlify这样的主机。现在就转到Gitlab页面!嘿,莎莎,你能考虑接受答案吗?对我的搜索很有帮助谢谢你提出了另一种解决方案。但我担心从杰基尔变成雨果更痛苦。或者,我也可以在GitLab上发布我的博客,这里支持自定义插件。谢谢<代码