4

ShakeWeb アプリケーションを構築するためのセットアップを試みています。.jsビルド プロセスの最後に、結果のファイルと.cssファイルの名前をコンテンツ ハッシュに従って変更したいと考えています (キャッシュ バスティングの目的で)。

これはもちろん、のようなファイルの最終的な名前がわからないことを意味しますapp-<hash>.min.js

最終的なものを構築するためのルールindex.htmlは名前について知る必要があるため、次のようなものが必要になります

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

私はphonyの行に沿ってアクションを使用しようとしました

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

phony "revJsAndCssFiles" $ do
  ... -- Hash and copy files to appropriate locations

phonyこれは機能しますが、アクションがファイルを生成することになっていないため、見苦しく見えます。

この問題にアプローチする最善の方法は何でしょうか?

4

1 に答える 1

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の内容を破棄するだけ) にも同様に機能しますが、少し見苦しく感じます。

于 2016-04-12T20:01:02.143 に答える