我正在寫一個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