摇动:当文件名先验未知时如何进行
Shake: how to proceed when file name is not known a-priori
我正在尝试设置 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
操作不应该
生成一个文件。
解决这个问题的最佳方法是什么?
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
中的文件名,这个技巧同样有效 - 然后您只需丢弃文件的内容 - 但感觉有点难看。
我正在尝试设置 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
操作不应该
生成一个文件。
解决这个问题的最佳方法是什么?
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
中的文件名,这个技巧同样有效 - 然后您只需丢弃文件的内容 - 但感觉有点难看。