html - Jekyll:生成一次包含并将其包含到所有页面

标签 html include jekyll liquid

TL;DR:我可以说以某种方式为 {% include %} 生成一次内容,然后在多个地方将其标记出来,而不必在每个位置重新生成它吗?

我正在使用 Jekyll 构建一个相当大的文档站点,该站点目前有 50 多篇文章。它有一个侧边栏,其中列出了所有文章。侧边栏构建在单独的 sidebar.html 中,然后通过 {% include sidebar.html %} in default.html 将其包含到站点的每个页面中。

我遇到的问题是每篇文章都单独运行 sidebar.html 的生成,所以我有超过 50 次生成通过那段代码。我添加的每篇文章都为此添加了另一遍,并使所有的遍都慢了一点,因为生成侧边栏必须解析项目中的每一篇文章。

构建时间已经从基本上为零增加到超过 100 秒,如果我删除 {% include sidebar.html %} 然后它会下降到 5 秒。当我收到所有文章时,我估计大约有 100-200 篇。然后我应该在未来对所有文章进行版本控制,这意味着从长远来看很容易有 1000 多篇文章。那时,如果在 jekyll servejekyll build 中更改一个文件中的一个字母需要大约一个小时来重新生成文件,我不会感到惊讶。

我想做的是在构建过程开始时构建一次 sidebar.html,然后在生成所述页面时将其标记到每个页面。这可能吗?

最佳答案

最快的方法。

_includes/sidebar.html 移动到 sidebar-template.html

添加这个前面的内容:

---
layout: null
permalink: sidebar-template.html
---

创建一个Rakefile

TPL = "_site/sidebar-template.html"
TST = "_includes/sidebar.html"

task :default => :nav

desc "Generates sidebar then copy it to be used as an include"
task :nav do

  if !File.exist?(TST)
    puts "Creating dummy #{TST} file"
    open(TST, 'w') do |f|
      f.puts warning
    end
  end

  puts "Building Jekyll 1st run"
  system "jekyll build --trace"

  # delete target file (TST) if exist
  if File.exist?(TST)
      puts "#{TST} exists deleting it"
      rm TST
  end

  # copy generated file as an include
  cp(TPL, TST)

  puts "Building Jekyll AGAIN"
  system "jekyll build --trace"

  puts "task END"
end

只需运行 rake 即可生成侧边栏。

关于html - Jekyll:生成一次包含并将其包含到所有页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30523270/

相关文章:

html - 当我刷新或访问新页面时,我网站上的字体大小先变大后变小

html - IE 7 和 8 CSS 3 使用 HTC 问题,只出现 1 个阴影,我需要粘性页脚

javascript - 在图像 div css 之上添加 DIV

html - 在bootstrap中自动调整列宽

Jekyll 自动重载客户端?

yaml - Jekyll/Liquid - 如何将大块文本添加到 YAML 前面的内容?

html - 当我添加更多元素时悬停停止工作

php - 如何在非 WordPress php 文件中包含 WordPress 页眉和页脚

c++ - #include boost 不使用 libs linux

loops - SASS 循环选择器