我正在写一个plugin,它定义了一个新的Jekyll块ditaa
。应将块中的任何内容从Ditaa markup转换为图像文件,并将该图像插入到帖子中而不是块中。生成文件可以工作,但是当复制到_site
目录中或生成时,该文件显然会被删除。如何从Jekyll中的液体块生成文件?
是否有适当/更好的方法来实现生成自定义资产的块插件?
我正在写一个plugin,它定义了一个新的Jekyll块ditaa
。应将块中的任何内容从Ditaa markup转换为图像文件,并将该图像插入到帖子中而不是块中。生成文件可以工作,但是当复制到_site
目录中或生成时,该文件显然会被删除。如何从Jekyll中的液体块生成文件?
是否有适当/更好的方法来实现生成自定义资产的块插件?
我已经找到了正确的解决:使用的Jekyll::StaticFile
类。
当您将此类的一个对象添加到site.static_files
阵列中时,您将此文件标记为在渲染过程完成后复制待处理。实际上,这些文件的副本在site.write
过程中完成。看看你的Jekyll安装中的site_process.rb
文件。
该课程的用法很简单。当您需要标记为未来的副本里的文件,只需执行这样的代码:
site.static_files << Jekyll::StaticFile.new(site, site.source, path, filename)
凡path
和filename
取决于src
文件夹文件的位置。
我有一个类似的问题开发乳液 - > PNG液体标签。你可以看看我的代码在GitHub:https://github.com/fgalindo/jekyll-liquid-latex-plugin
我还没有找到正确的方法来做到这一点,但一个工作。该解决方案可在GitHub上找到,并使用Jekylls能力将任何前缀不带下划线的内容复制到_site
目录。但是,这种方法也具有两个缺点:
我找到了答案。
替换此
site.static_files << Jekyll::StaticFile.new(site, site.source, path, filename)
与
gnufile = GNUplotFile.new(site, site.source, "_site/media/", "#{@file}")
gnufile.givemethecommands commands
site.static_files << gnufile
,并创建一个GNUplotFile
类,在清理过程之后继承杰基尔:: StaticFile
class GNUplotFile < Jekyll::StaticFile
def write(dest)
puts "WRITE---->>>>>>>>>>>"
#File.write('_site/media/BTTTTT.svg', DateTime.now)
gnuplot(@commands)
# do nothing
end
def gnuplot(commands)
IO.popen("gnuplot", "w") { |io| io.puts commands }
end
def givemethecommands(commands)
@commands = commands
end
end
写命令运行。我只是有一个Liquid块和上面的代码。
非常感谢。你是否设法在源码树之外生成文件(例如'/ tmp')并使用'StaticFile'从那里获取文件? – matthias
不,我把生成的文件保存在'src'里面。我复制结构:'src/res/latex' <->'site/res/latex'。这有助于保持生成文件的缓存。如果该文件已经存在,则不需要重新编译。该插件删除所有临时和过时的文件(孤立的)。看看我的代码,如果你喜欢,或者让我与你合作,通过拉取请求来改善它,那就去抓取清理程序。事实上,我发现'ditaa'谢谢你的问题,并且一见钟情。 –
感谢您的澄清,我实际上不希望将生成的数据保留在源代码树中,因为它受版本控制。但是,检查它是否已经被复制到'_site'应该是可能的,对吧?您可以自由发出拉请求;-) P.S .:我会更新您接受的答案,因为它确实是适当的解决方案。 – matthias