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

时间:2018-11-08 20:06:01

标签: ruby jekyll github-pages

事实证明,由于security concerns,自定义ruby插件在GitHub页面上不起作用。

我正在尝试将插件(this one)添加到Jekyll项目的_plugins文件夹中,但是当我将其部署到GitHub时,它将被忽略。

问题:是否可以解决此问题?有没有人找到解决方案?

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

5 个答案:

答案 0 :(得分:4)

没有插件

阅读时间脚本不需要插件。我创建了一个脚本集合,无需使用插件即可添加这些脚本。您可以找到它们hereA reading time script是其中之一。

在这里找到代码:

{% 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>' %}

当然可以扩展以支持更多标签。

仍然使用插件

如果您真的要使用插件,则可以让您的本地计算机或CloudCannon构建您的站点并将结果推送到Github Pages。另请参阅:https://learn.cloudcannon.com/jekyll/using-jekyll-plugins/

答案 1 :(得分:1)

如果您想使用自定义插件,则必须在本地“构建”网站,然后将其作为HTML,CSS和其他文件(不再是Markdown文件)的集合自己部署到gh-pages分支中)。您可能需要尝试jgd命令行来帮助您自动完成所有操作。只需安装它,然后运行:

$ jgd

该站点将被打包,然后部署到您的仓库的gh-pages分支中。在我的博客文章Deploy Jekyll to GitHub Pages

中有关于它的更多信息

答案 2 :(得分:1)

如果您想使Jekyll网站像在本地一样运行,例如让自定义插件正常运行,这是一种真正方便的构建方式 Jekyll网站访问Github Pages。

?一个Github Action,可为GitHub Pages方便地部署Jekyll网站。 https://github.com/jeffreytse/jekyll-deploy-action

通过此操作,我认为您的问题可以得到完美解决。

答案 3 :(得分:0)

您需要这些插件的替代产品。

如“ Building a Series List with Hugo Shortcodes”中所述:

在Github页面上完全禁用了Ruby插件执行:

  

GitHub Pages上的插件GitHub Pages由Jekyll驱动。
  但是,所有Pages网站都是使用-safe选项生成的,出于安全原因禁用自定义插件。不幸的是,这意味着如果您要部署到GitHub Pages,插件将无法使用。

     

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

我了解您提到的内容:

  

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

仍然要考虑使用静态网站生成器(与GitHub页面兼容),例如 Hugo

R.J Lorimer添加:

  

雨果具有 Shortcodes 的概念,非常类似于Jekyll中的“液体标签”。
  与Jekyll一样,您可以创建自定义的简码标签。

     

但是,主要的区别在于,在Hugo中,您无需借助实际编写Go代码就可以创建它们-请参见Create Your Own Shortcodes
  由于Hugo使用Go模板来呈现页面,因此简码可以使用其中的所有Go模板函数以及为帮助而添加的自定义Hugo函数的完整列表。可以说它比液体模板解决方案更强大,但仍在可以轻松进行动态更新的模板文件中。

另外,雨果(Hugo)和support MathJax一样seen in this article

2018年11月更新:带有Hugo 0.52tweet confirms(引用this thread):

  

inline shortcode 与Jekyll允许您在Markdown中使用Liquid标签的方式

答案 4 :(得分:0)

如果您不是本地解决方案,因为它很耗时,则可以使流程自动化,以便在您将更改推送到master时它将自动在本地构建网站并将更改推送到gh-pages分支。

您可以通过在仓库(pre-push)中创建一个.git/hooks/pre-push钩子来实现此目的,该钩子具有以下内容:

#!/bin/sh

# If any command fails in the bellow script, exit with error
set -e

# Set the name of the folder that will be created in the parent
# folder of your repo folder, and which will temporarily
# hold the generated content.
temp_folder="_gh-pages-temp"

# Make sure our main code runs only if we push the master branch
if [ "$(git rev-parse --symbolic-full-name --abbrev-ref HEAD)" == "master" ]; then
    # Store the last commit message from master branch
    last_message=$(git show -s --format=%s master)

    # Build our Jekyll site
    jekyll build

    # Move the generated site in our temp folder
    mv _site ../${temp_folder}

    # Checkout the gh-pages branch and clean it's contents
    git checkout gh-pages
    rm -rf *

    # Copy the site content from the temp folder and remove the temp folder
    cp -r ../${temp_folder}/* .
    rm -rf ../${temp_folder}

    # Commit and push our generated site to GitHub
    git add -A
    git commit -m "Built \`$last_message\`"
    git push

    # Go back to the master branch
    git checkout master
else
    echo "Not master branch. Skipping build"
fi

有关更多详细信息,请see my blog post