问题标签 [shake-build-system]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
109 浏览

haskell - 存储规则的元数据

我有一个函数可以在相关命令更改时重建目标:

我不想为此任务触及文件系统,有没有办法存储关联的命令行并在该命令更改时触发最终规则?

0 投票
1 回答
124 浏览

haskell - 摇晃:表明是否必须重建任何东西

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

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

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

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

0 投票
1 回答
36 浏览

shake-build-system - 如何在构建过程中更改 Shake 打印的信息

目前在构建 Shake 输出行时,例如:

但这对我们的应用程序来说没有信息,所以我们想打印如下内容:

你怎么能在 Shake 中做到这一点?

0 投票
1 回答
123 浏览

haskell - 如何检查运行抖动是否会重建目标(而不实际尝试构建它)?

在某些情况下,我想很快知道某个目标文件是否是最新的,即使用shake 构建它是否会运行任何对目标有影响的规则。

用奶昔实现这一目标的最佳方法是什么?

我的问题与Shake 有点相关:表明是否需要重建任何东西。但是,我不想运行实际的构建,因为我不想接触我的任何构建产品。

0 投票
1 回答
135 浏览

haskell - 为什么 Shake 不为 Action 提供 MonadMask 实例?

我想将这个temporaryShake一起使用,但这需要Action有一个 for 的实例MonadMask,而这个实例是缺失的。为什么 Shake 不提供这样的实例?

0 投票
1 回答
162 浏览

haskell - 如何在 Shake 中显示进度?

我试图弄清楚如何在执行命令之前从 Progress 类型(在 Development.Shake.Progress 中)获取进度信息以输出它。可能的期望输出将是:

现在我正在使用一些 IORef 来模拟这个,它保持总数(最初设置为源文件的总和)和我在执行每个构建命令之前增加的计数,但这对我来说似乎是一个 hackish 解决方案。

最重要的是,该解决方案似乎在干净的构建上可以正常工作,但在部分构建上表现不佳,因为显示的总和仍然是所有源文件的总和。

通过访问 Progress 数据类型,我将能够使用它的 countSkipped、countBuild 和 countTodo 成员正确计算这个分数(参见 Progress.hs:53),但我仍然不确定如何实现这一点。

任何帮助表示赞赏。

0 投票
1 回答
114 浏览

shake-build-system - 如何在摇动中构建变体?

如何在shake中传递参数,然后在我们的规则中使用它们?我想做一些等价物:

make ARCH=x86_64
或者
make DEBUG=YES 等等……

现在我一直在使用环境变量和getEnv函数来模拟这些。
如何对给定参数(环境变量)建立依赖关系,以便可以在构建中读取一次,将其存储在某处并从多个规则访问它?

例如,现在我在多个规则中多次执行 getEnv,但在编译期间环境变量可能会发生变化。此外,例如,调试标志可以更改编译器和链接器标志,这意味着信息需要在链接和编译输出规则中都可用。

0 投票
2 回答
110 浏览

haskell - 在 Shake 函数 `want` 和 `need` 中使用 `FilePattern`/通配符

函数wantneed都要求它们的输入是 typeFilePath而不是FilePattern. 我的输出和输入的文件名遵循不同的模式,输出_build/*checker.sh和输入是./*.py. 因此我宁愿做一个want形式:

want我尝试通过组合来构建更复杂的东西,getDirectoryFiles, action, need但这不起作用,因为getDirectoryFiles返回Action [FilePath]而不是FilePath.

这个问题的正确解决方案是什么?

0 投票
2 回答
77 浏览

shake-build-system - 如何避免并行构建中的输出同步问题?

在摇动中使用并行构建时,我得到如下格式错误的输出:

我想这是我打印的某种同步问题。我应该注意,我使用以下命令作为输出命令:

shakeOutput = const $ BS.putStr . BS.pack

我的规则的状态消息打印部分如下所示:

有没有办法避免我的输出内置抖动出现这种打印问题?如果不知道打印代码在抖动规则内,则适合使用哪种 haskell 同步方法?

0 投票
1 回答
59 浏览

shake-build-system - 如何根据外部因素构造规则名称?

直到现在我有以下代码:

这意味着规则的名称是根据我正在解析的命令行标志构造的(它们包含 arch 变量)。

因此,如果我给shake --arch=x64我在bin/x64/Release目录中构建主要目标,并在tmp/x64/Release文件夹中相应地构建我的中间文件。

但是现在我不使用命令行标志,而是希望用于构造规则名称的共享 arch 变量根据某些命令的输出来填充,例如,如果我可以定义一些顶级操作,它将是这样的:

mainTgt并在构造andbuildDir名称时使用变量 foundArch 而不是 arch 。显然这是无法做到的,因为即使是可以使用action函数返回的唯一顶级规则Rule ()。我能做什么呢?