3

我使用shake 构建了一堆静态网页,然后我必须使用sftp 将其上传到远程主机。目前,cronjob 运行

git pull # get possibly updated sources
./my-shake-system 
lftp ... # upload

如果抖动实际上没有重建任何东西,我想避免运行最终命令。有没有办法告诉摇“运行命令foo,在其他所有事情之后,并且只有当你改变了一些东西!”?

或者,有抖动报告它是否在进程退出代码中做了什么?

我想我可以添加一个依赖于所有可能生成的文件的规则,但这似乎是多余的并且容易出错。

4

1 回答 1

2

目前没有直接/简单的方法来确定是否构建了任何东西。对于更简单的构建系统,它也不是一个有用的概念,因为某些规则(尤其是那些定义storedValue为 return的规则Nothing)将始终“重新运行”,但很快就会决定它们不需要运行依赖于它们的规则。对Shake来说,这与重新运行相同。我可以想到几种方法,哪种方法最好可能取决于您的情况:

标记有趣的规则

您可以使用写入特定文件的函数标记每个有趣的规则(产生需要上传的内容的规则)。如果该特定文件存在,那么您需要上传。这可能会稍微好一些,就好像您进行多次 Shake 运行一样,在第一次发生变化但第二次没有变化时,文件仍然存在。如果有意义,请使用 anIORef而不是文件。

使用分析

Shake 具有相当先进的分析功能。如果您通过shakeProfile=["output.json"],它将生成一个 JSON 文件,详细说明构建的内容和时间。运行由一个 Int 索引,0最近一次运行,并且任何没有构建的运行都被排除在外。如果您有一个总是触发的规则(例如,使用 写入一个虚拟文件alwaysRerun),那么如果同时触发了任何东西,它就会重建。

.shake.database文件大小

Shake 有一个数据库,存储在shakeFiles. 每次无趣的运行它都会增长一个相当小的数量(约 100 字节)——但给定您的系统,它的大小是固定的。如果它的大小变化更大,那么它做了一些有趣的事情。

在这些方法中,标记有趣的规则可能是最简单和最直接的(尽管确实存在忘记标记某些内容的风险)。

于 2015-05-17T20:00:32.430 回答