Haskell 抖动:文件名未知时如何继续

Haskell 抖动:文件名未知时如何继续,haskell,shake-build-system,Haskell,Shake Build System,我正在尝试设置Shake以构建web应用程序。在构建过程结束时,我想根据内容散列(出于破坏缓存的目的)重命名生成的.js和.css文件 这当然意味着我不知道文件的最终名称,这些文件看起来像app-.min.js 因为构建最终index.html的规则需要知道 关于名字,我需要像 "index.html" %> \out -> do need [ "app-<hash>.min.js" ] ... 这是可行的,但看起来很丑陋,因为一个虚假的行为是不应该的 生成一个

我正在尝试设置
Shake
以构建web应用程序。在构建过程结束时,我想根据内容散列(出于破坏缓存的目的)重命名生成的
.js
.css
文件

这当然意味着我不知道文件的最终名称,这些文件看起来像
app-.min.js

因为构建最终
index.html
的规则需要知道 关于名字,我需要像

"index.html" %> \out -> do
  need [ "app-<hash>.min.js" ]
  ...
这是可行的,但看起来很丑陋,因为一个
虚假的
行为是不应该的
生成一个文件


解决此问题的最佳方法是什么?

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”%>\out->do
src“
这里有一个不断命名的规则(
hash js.txt
),它既可以生成所需的文件(位于未知位置),也可以生成该文件的名称(位于固定位置)。这样,当您需要
index.html
中的文件时,您都可以依赖该规则,并获得可能需要的结果文件名

如果您不需要
index.html
中的文件名,那么这个技巧同样有效-然后您只需扔掉文件的内容-但感觉有点难看

"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 ++ ">"