2

我正在编写一个定义新 Jekyll 块的插件ditaa。块中的任何内容都应从Ditaa 标记转换为图像文件,并将该图像插入帖子而不是块中。生成文件有效,但是当复制到目录或在_site目录中生成时,文件显然被删除了。

是否有适当/更好的方法来实现生成自定义资产的块插件?

4

3 回答 3

2

我找到了正确的解决方案:使用Jekyll::StaticFileclass

当您将此类的一个对象添加到数组中时,您将在渲染过程完成site.static_files将此文件标记为待复制。实际上,此类文件的复制是在此过程中完成的。查看 Jekyll 安装中的文件。site.writesite_process.rb

这个类的使用很简单。当您需要标记文件以供将来复制时,您只需执行如下代码:

site.static_files << Jekyll::StaticFile.new(site, site.source, path, filename)

path位置和filename位置取决于文件夹中文件的位置src

我在开发 LaTeX -> PNG 液体标签时遇到了类似的问题。您可以在 GitHub 上查看我的代码:https ://github.com/fgalindo/jekyll-liquid-latex-plugin

于 2013-11-10T14:14:15.827 回答
1

我还没有找到正确方法来做到这一点,但是一种有效的方法。该解决方案可以在GitHub上找到,并使用 Jekylls 功能将任何不带下划线前缀的内容复制到_site目录中。但是,这种方法也有两个缺点:

  1. “源”目录被自动生成的文件污染
  2. 没有自动重新生成的部署有点尴尬,因为图像是在Jekyll 已经复制所有文件之后生成的。所以第二次 Jekyll 运行是必要的。
于 2012-08-26T11:40:42.510 回答
1

我找到了答案。

替换这个

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继承 Jekyll::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 块和上面的代码。

于 2015-05-04T16:48:20.067 回答