2

新しい Jekyll ブロッ​​クを定義するプラグインを作成していますditaa。ブロック内のすべてのコンテンツをDitaa マークアップから画像ファイルに変換し、その画像をブロックの代わりに投稿に挿入する必要があります。ファイルの生成は機能しますが、ディレクトリにコピーまたは生成する_siteと、ファイルは明らかに削除されます。

カスタム アセットを生成するブロック プラグインを実装する適切な/より良い方法はありますか?

4

3 に答える 3

2

私は適切な解決策を見つけました:クラスを使用してJekyll::StaticFileください。

このクラスの 1 つのオブジェクトを配列に追加すると、レンダリング プロセスの完了後にsite.static_files、このファイルがコピー待ちとしてマークされます。実際、そのようなファイルのコピーはプロセスで行われます。Jekyll インストールのファイルを見てください。site.writesite_process.rb

このクラスの使い方は簡単です。将来のコピーのためにファイルをマークする必要がある場合は、次のようなコードを実行するだけです。

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

場所pathfilenameは、フォルダー内のファイルの場所によって異なりsrcます。

LaTeX -> PNG Liquid タグの開発で同様の問題がありました。GitHub で私のコードを見ることができます: https://github.com/fgalindo/jekyll-liquid-latex-plugin

于 2013-11-10T14:14:15.827 に答える
1

私はそれを行う適切な方法を見つけていませんが、うまくいく方法です。このソリューションはGitHubで見つけることができ、Jekylls の機能を使用して、アンダースコアが前に付いていないものをすべてディレクトリにコピーします_site。ただし、このアプローチには 2 つの欠点もあります。

  1. 「ソース」ディレクトリが自動生成されたファイルで汚染される
  2. Jekyll がすべてのファイルをコピーした後にイメージが生成されるため、自動再生成なしでデプロイするのは少し厄介です。そのため、2 回目の 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 

GNUplotFileJekyll::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 に答える