问题标签 [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 回答
213 浏览

shake-build-system - Shake 如何决定是否重建目标?

我对Shake用来确定是否需要重建输出的规则感到困惑。我有一个简单的文档构建,有两个步骤。下面是完整的构建文件,但总而言之,asciidoc它用于将.txt文件转换为.dbxml(Docbook XML)文件,然后使用dblatex.

我希望如果我触摸 PDF 并重新运行摇动,什么都不会发生,因为输出比两个输入都新。然而,shake 实际上执行了 dblatex 步骤。

接下来,我希望如果我触摸该.dbxml文件,则shake 将执行 dblatex 而不是 asciidoc,因为 dbxml 比其输入(即.txt)更新。然而,shake 实际上同时执行 asciidoc 和 dblatex 步骤。

我在依赖项中犯了错误吗?

0 投票
2 回答
306 浏览

haskell - 我应该如何让 Shake 知道需要 'ghc --make' 来跟踪对 haskell 文件的更改?

我想知道使用抖动和ghc --make一起的推荐方式。在我的项目中,shake 规则用于将 C 源代码编译到它们的*.o文件中(我称之为cobjects),并且这些对象通过调用链接到我的 haskell 程序中ghc --make。在此命令期间,ghc它会自行确定何时需要重建我的 haskell 文件。

下面的示例未正确编写以集成这两个工具。如果.hs文件更改,则重新运行摇动脚本不会重新调用ghc --make. 我理解为什么 Shake 不知道重建,但我不知道推荐的修复方法。

0 投票
2 回答
782 浏览

haskell - SCons 和 Shake 的区别

我正在开发一个 Python/Haskell 项目,我正在寻找Makefile. 显而易见的选择是 Python SCons和 Haskell Shake。由于我对它们中的任何一个都没有经验,所以我想问一下它们的优缺点是否有任何比较。

更新:该项目对构建有一些复杂的要求:

  • 让用户配置构建 - 启用/禁用选项、工具路径等。
  • 在编译时会生成 Haskell 和 Python 文件。它们的依赖项应该可以正常工作。
  • 有多个 Haskell 程序共享大部分源文件。我想这样:
    • 可以单独构建每一个,而不是构建不需要的源;
    • 编译多个程序时不会多次构建源文件;
    • 如果可能的话,在编译期间实现并行性。
  • 检查目标系统上的几个已安装程序及其路径(如pythonflock
  • 检查目标系统上的依赖关系,包括 Python、Haskell。
  • 根据依赖项对构建进行参数化 - 如果缺少用于测试的依赖项,则应该仍然可以构建项目,跳过测试(并通知用户)。
0 投票
2 回答
238 浏览

javascript - 如何使用 Shake FilePatterns 来缩小 JS 和 CSS 文件?

.js文件缩小的常见做法.css是创建.min.js文件.min.css。问题是Shake FilePatterns将使用此方案匹配缩小和非缩小文件,其模式类似于//*.js. 文档似乎建议为每个喜欢制作独特的扩展,reg.jsmin.js我不确定这是我想走的路。如何在 Shake 中解决这个问题?

编辑:问题在于使用getDirectoryFiles

有一个目标可以"//*.min.js正常工作,但getDirectoryFiles "" ["//*.js"]开始拾取生成的.min.js文件。

0 投票
1 回答
60 浏览

shake-build-system - 默认的等价物是什么:在Shake中

我正在尝试在小型项目中使用 Shake 作为 Make 的替代品。目前它主要用于别名 shell 命令。有没有办法指定默认的假动作?类似于默认的东西:在makefile中。例如,给定:

我想声明,如果没有给定目标,它会运行build.

0 投票
1 回答
74 浏览

haskell - 在 Shake 规则中恢复源文件名

我正在为一个静态网站编写一个构建系统,它的工作方式如下:

  • 为每个文件src/123-some-title.txt生成一个文件out/123.html

我的问题是,在编写规则时,out/*.html我没有直接的方法可以src/123-some-title.txt从目标文件名 () 中恢复源文件名 ( out/123.html)。

当然,我可以src/再次读取目录并搜索以 开头的文件123,但是有没有更好的方法来使用 Shake 来做到这一点?

0 投票
1 回答
509 浏览

haskell - 如何使用 Shake 执行 sh 命令

我正在尝试将现有的 makefile 迁移到 Shake,到目前为止,我已经尝试了以下操作(只需创建一个包含目录内容的文件)

当我运行它时,我收到以下错误消息:

我究竟做错了什么?如何执行sh命令并重定向其输出?

0 投票
2 回答
243 浏览

haskell - 如何在 Shake 中定义计时器规则

我试图了解如何使用Shake以及如何建立新规则。作为练习,我决定实施我所说的backup规则。

这个想法是如果文件不存在或者文件太旧(让我们超过 24 小时),则生成一个文件。我喜欢将长命令存储在生成文件中并按需运行它们。一个例子是 mysql 备份。唯一的问题是当备份已经存在时,make什么都不做。为了解决这个问题,我可以

  • 在重做新备份之前删除以前的备份,
  • 制作备份目标phony
  • 添加一个虚构的force依赖项,我可以手动或在 cron 中触摸它。

我想要的是重做备份,如果它超过 24 小时(我可以用一个touch forcein cron 来做)。无论如何,这只是一个可以玩的例子Shake。我想要的是这样的:

我阅读了文档,但我不知道如何执行此操作或定义规则以及 anAction是什么。我知道我需要实例化一个Rule类,但我不知道是什么。

澄清

我不希望备份自动运行,而是仅按需运行,但每 24 小时最多运行一次。

一个示例场景是我在远程机器上有一个生产数据库,本地复制并在本地运行一些耗时的报告。正常的工作流程是

  • 下载生产备份
  • 用它刷新本地数据库
  • 在本地仓库数据库上创建一些非规范化表
  • 生成一些报告。

我不是每天都运行报告,而是仅在需要时运行。所以我不想每 24 小时运行一次报告。除了时间位之外,使用 makefile 很容易,它们可以解决,但它再次是一个人为的示例,可以深入了解 Shake 的工作原理。

所以,当我第一次make report备份数据库时,运行所有内容并生成报告。现在,我想修改报告(因为我正在测试它)。我不需要重新生成备份(也不需要刷新本地数据库)(我们是晚上,我知道直到第二天生产都没有任何变化)

然后第二天,或者下个月,我重新运行报告。这次我需要再次完成备份,并且所有依赖项也需要重新运行。

基本上我需要的规则是

重做时间戳=时间戳<旧

重做时间戳 = 时间戳 < 旧 || 现在 > 时间戳 + 24*36000

但我不知道把这条规则放在哪里。

问题更多的是把它放在哪里,而不是如何写它(它在上面)。如果它更容易(解释)我可以有一个规则询问用户(getLine)“你想重做这个目标(是/否)吗?”。

稍后我还将需要一个规则,具体取决于数据库(或特定表)的最后更新。我知道如何从数据库中获取信息,但不知道如何将其集成到 Shake 中。

我可能对 aRule是什么感到困惑。制定规则是关于如何制定目标(所以它更像是一个食谱)或者我认为是摇动中的行动。在哪里,当我说规则时,我指的是决定是否重新制作目标的规则,而不是如何去做。在 make 中,您没有选择权(它是时间戳),因此没有这样的概念。

0 投票
1 回答
460 浏览

haskell - 如何输出 /p:Platform="Any CPU" 引用自摇 cmd?

我正在使用cmdShake 并且无法形成以下命令行...

当我尝试转义双引号时,转义和字符串引用流得太远并出现此错误...

我试过3种方法...

我在 Windows 上运行它。

0 投票
1 回答
66 浏览

shake-build-system - 在 Shake 中查看控制台进度消息

我正在使用 Shake,调用wget下载文件。如果我在命令行上执行此操作,我会看到一个单行进度条,但是当从 Shake 调用时,我会看到很多行点。举个例子:

我希望它显示单行进度条。