gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 13:49:31 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com