1

マークダウンから HTML を生成するために使用している Rakefile があります (そして、質問に関係のない他のことを行います。

ソースの .feature ファイル ( FileList 内DOCUMENTS) から出力ディレクトリOUTPUTに HTML としてファイルを生成しています。htmlfileHTML ファイルを組み立てて記述する方法があります。

ここで 2 つの代替オプションを試しています。

ファイル タスク:

DOCUMENTS.each do |doc|
  file doc.pathmap("#{OUTPUT}/%X.html") => doc do |t|
    htmlfile t.name, RDiscount.new(F.read doc).to_html, t.name.pathmap('%n')
  end
end

ルールを使用して合成されたファイル タスク:

rule '.html' => proc {|html| html.pathmap("%{#{OUTPUT}/,}X.feature")} do |t|
  htmlfile t.name, RDiscount.new(F.read t.source).to_html, t.name.pathmap('%n')
end

私の理解では、後者のオプションはファイルタスクを合成し、同じ正味の効果があるということでした。ただし、それを選択すると、最初のオプションでは対応できるのに対し、インクリメンタル ビルドには対応できないことがわかりました。

ビルドして 1 つのファイルを変更し、rake --trace を実行すると、次のようになります。

合成タスクの場合:

** Invoke output/Module/Feature.html (first_time, not_needed)
** Invoke output/Module (not_needed)

また、明示的なファイル タスクを使用すると、次のようになります。

** Invoke output/Module/Feature.html (first_time)
** Invoke output/Module (not_needed)
** Invoke Module/Feature.feature (first_time, not_needed)
** Execute output/Module/Feature.html

このオプションは明らかにソース ファイルをチェックしています。出力とソースをリンクすることはまさにルールだと思いました

4

1 に答える 1

4

(コメントではなく、実際の回答として回答するのが最も役立つと思います。https://meta.stackexchange.com/questions/68507/what-to-do-if-you-find-the-answerを参照してください。 -あなた自身の質問へ)

file outdoc => somethingRakefile の他の場所にあると、合成されたタスクが混乱することがわかりました。一方、これらの出力ドキュメントのファイル タスクがある場合は、前提条件に追加され、正常に動作します。これは理にかなっています。合成されたタスクは実際には存在しません。

また、ルールは 1 つのレベルの推論 ( http://onestepback.org/articles/buildingwithrake/rulelimitations.html )に対してのみ機能することもわかりましたが、それは答えにはなりませんでした。

修正: タスクの前提条件を再配置するか、明示的なファイル タスクを使用します。

于 2011-01-28T12:03:17.053 に答える