包含文件并将它们复制到输出

时间:2014-09-30 19:23:20

标签: jekyll

在Jekyll支持的页面中,我有一组文件位于:

_includes/stuff/

我将这些文件放在那里,以便我可以{:1}使用其他Markdown页面include使用:

{% include stuff/example.txt %}

这可以按预期工作。

但是,我还想将这些文件复制到生成的页面,以便我可以链接到它们,并且人们可以按照这些链接下载它们。但根据定义,存储在以下划线开头的目录中的东西不会被Jekyll复制。

另一种方法也不起作用。我把这些文件放在一个名为stuff的顶级文件夹中。这会将文件夹复制到最终站点。但是,我无法在此文件夹中包含文件。似乎include_relative只允许包含当前文件以下的文件。例如,以下内容不起作用:

{% include_relative stuff/example.txt %}
{% include_relative /stuff/example.txt %}
{% include_relative ../stuff/example.txt %}

我可以在同一时间实现包含和复制的任何想法吗?

1 个答案:

答案 0 :(得分:3)

这适用于index.html

{% include_relative example.txt %} for example.txt
{% include_relative stuff/example.txt %} for stuff/example.txt
{% include_relative /stuff/example.txt %} for stuff/example.txt

<强>东西/ example.txt中

class Toto
  def dototo
      myvar = "toto"
  end
end

<强>的index.html

{% assign codeurl = "stuff/example.txt" %}
{% highlight ruby %}
{% include_relative {{codeurl}} %}
{% endhighlight %}
<a href="{{codeurl}}">link to code</a>

if codeurl == "/stuff/example.txt" this generates a link relative to site root
this may need {{site.baseurl}} prepended if your site is not at the root 
of a domain (eg: user.github.io/repository)
<a href="{{site.baseurl}}{{codeurl}}">link to code</a>

出于安全原因,这不起作用:

{% include_relative ../stuff/example.txt %}
Just to avoid directory traversal
{% include_relative ../../../../../../../../../../../../etc/pwd %}

如果您想将文件放在 _includes / stuff 中,则需要在_config.yml中执行include: [ /_includes ],其中包含_includes中的所有文件作为静态文件。不是很干净,因为你不能过滤像include: [ /_includes/stuff ]这样的子目录来只导入你的东西文件。

注意:一个脏技巧只允许您导入_includes/stuff/*.txt,但我认为它真的很脏。

# _config.yml
include:
  - "_includes"
  - "stuff"
  - "*.txt"

exclude:
  - "_includes/*.*"