2011-07-18 2 views
1

PhingのUpToDateTaskを マッパーで使用する方法の例を教えてもらえますか?私はそれを理解することはできませんし、ネット上の例を見つけることができません。マッパーを使ってPhing UpToDateTask?

ここに私が達成しようとしているものがあります。私は がExecTaskとRubyのSASSパーサーを使ってCSSに変換するSCSSファイルをたくさん持っています。しかし、私は ソースファイルのいずれかが変更された場合、CSSファイルを再生成したいだけです。

ソースSCSSファイルはapp/assets/cssであり、コンパイルされたファイルは がapp/webroot/cssに配置されています。 UpToDateTaskを使用して、app/assets/cssにある のファイルのいずれかが app/webroot/cssのいずれのファイルより新しいかどうかをテストできますか。

SASSコミックには、 CSSファイルに対する1対1のファイル名マッピングがありません。最終的に が3-4のCSSファイルにコンパイルされるダースのSCSSファイルが存在する可能性があります。これらのCSSファイルを私のbuild.xmlにハードコードすることはできますが、より一般的で再利用可能なビルドターゲットを作成したいと思います。

ありがとうございます!

答えて

0

試行錯誤して自分で考え出しました。上で説明したシナリオI(ソースディレクトリ内のファイルが宛先ディレクトリ内のファイルより新しいかどうかをテストする)は、uptodateタスクのマッパーを使用して達成することはできません。 uptodateタスクは、単にfilesetを反復処理し、mapperを使用して任意のファイル名を変換し、そのファイルを元のファイルと比較します。

当分は、アンダースコア(SASSを含む)で始まらないすべてのファイルと、ちょうどグロブとなる単純なマッパーを含むファイルセットを使用しています*.scssから*.css。それは機能しますが、完璧ではありません。インクルードファイルの1つだけが変更された場合(アンダースコアで始まるもの)、Phingは変更を検出せず、CSSアセットの再構築をスキップします。

1

結果ファイルが存在することが事前に分かっている場合は、アイデンティティマッパーを使用して、各ソースファイルが単一の結果ファイルよりも新しいかどうかを確認できます。各結果ファイルに対してこれを行い、変更があったかどうかを知ることができます。

+0

私は知っています。もっと汎用的な方法を探していたので、新しいSCSSファイルを追加しただけでビルドスクリプトを変更する必要はありません。 –

関連する問題