2016-04-12 11 views
3

Webアプリケーションを構築するためにShakeを設定しようとしています。私のビルドプロセスの終わりに、結果の.js.cssという名前のファイルをコンテンツのハッシュ(キャッシュの破棄目的)に応じて名前を変更したいと思います。Shake:ファイル名が先験的にわからないときの処理方法

これはもちろん、app-<hash>.min.jsのようなファイルの最終的な名前はわかりません。

名について を知るために、最終的なindex.htmlニーズを構築するための規則ので、私は

"index.html" %> \out -> do 
    need [ "revJsAndCssFiles" ] 
    ... 

phony "revJsAndCssFiles" $ do 
    ... -- Hash and copy files to appropriate locations 
の線に沿って phonyアクションを使用してみました

"index.html" %> \out -> do 
    need [ "app-<hash>.min.js" ] 
    ... 

のようなものが必要になります

これは動作しますが、phonyアクションは ファイルを生成する予定ではないため、醜いと思われます。

この問題にアプローチするにはどうすればよいでしょうか?

答えて

2

index.htmlはハッシュされたJavascriptファイルを参照する必要がありますか?その場合、1つのアプローチは、次のとおりです。

"hash-js.txt" %> \out -> do 
    src <- readFile' "app.min.js" 
    let file = "app-" ++ show (hash src) ++ ".min.js" 
    writeFile' file src 
    writeFile' out file 

"index.html" %> \out -> 
    js <- readFile' "hash-js.txt" 
    writeFile' out $ "<script src='" ++ js ++ ">" 

ここでは、両方が(固定位置に)あなたが(未知の場所に)したいファイル、およびそのファイルの名前を生成し、絶えず命名規則(hash-js.txt)を持っています。そうすれば、index.htmlのファイルが必要なときに、その両方に依存し、必要なファイル名を出力することができます。

このトリックは、index.htmlにファイル名が必要ない場合にも同様に機能し、ファイルの内容を破棄しますが、少し醜いと感じます。

関連する問題