4

我正在尝试Shake为构建 Web 应用程序进行设置。在我的构建过程结束时,我想根据内容哈希重命名结果.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 文件?如果是这样,一种方法是:

"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 回答