问题标签 [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.
shake-build-system - Shake 如何决定是否重建目标?
我对Shake用来确定是否需要重建输出的规则感到困惑。我有一个简单的文档构建,有两个步骤。下面是完整的构建文件,但总而言之,asciidoc
它用于将.txt
文件转换为.dbxml
(Docbook XML)文件,然后使用dblatex
.
我希望如果我触摸 PDF 并重新运行摇动,什么都不会发生,因为输出比两个输入都新。然而,shake 实际上执行了 dblatex 步骤。
接下来,我希望如果我触摸该.dbxml
文件,则shake 将执行 dblatex 而不是 asciidoc,因为 dbxml 比其输入(即.txt
)更新。然而,shake 实际上同时执行 asciidoc 和 dblatex 步骤。
我在依赖项中犯了错误吗?
haskell - 我应该如何让 Shake 知道需要 'ghc --make' 来跟踪对 haskell 文件的更改?
我想知道使用抖动和ghc --make
一起的推荐方式。在我的项目中,shake 规则用于将 C 源代码编译到它们的*.o
文件中(我称之为cobjects
),并且这些对象通过调用链接到我的 haskell 程序中ghc --make
。在此命令期间,ghc
它会自行确定何时需要重建我的 haskell 文件。
下面的示例未正确编写以集成这两个工具。如果.hs
文件更改,则重新运行摇动脚本不会重新调用ghc --make
. 我理解为什么 Shake 不知道重建,但我不知道推荐的修复方法。
haskell - SCons 和 Shake 的区别
我正在开发一个 Python/Haskell 项目,我正在寻找Makefile
. 显而易见的选择是 Python SCons和 Haskell Shake。由于我对它们中的任何一个都没有经验,所以我想问一下它们的优缺点是否有任何比较。
更新:该项目对构建有一些复杂的要求:
- 让用户配置构建 - 启用/禁用选项、工具路径等。
- 在编译时会生成 Haskell 和 Python 文件。它们的依赖项应该可以正常工作。
- 有多个 Haskell 程序共享大部分源文件。我想这样:
- 可以单独构建每一个,而不是构建不需要的源;
- 编译多个程序时不会多次构建源文件;
- 如果可能的话,在编译期间实现并行性。
- 检查目标系统上的几个已安装程序及其路径(如
python
等flock
) - 检查目标系统上的依赖关系,包括 Python、Haskell。
- 根据依赖项对构建进行参数化 - 如果缺少用于测试的依赖项,则应该仍然可以构建项目,跳过测试(并通知用户)。
javascript - 如何使用 Shake FilePatterns 来缩小 JS 和 CSS 文件?
.js
文件缩小的常见做法.css
是创建.min.js
文件.min.css
。问题是Shake FilePatterns将使用此方案匹配缩小和非缩小文件,其模式类似于//*.js
. 文档似乎建议为每个喜欢制作独特的扩展,reg.js
但min.js
我不确定这是我想走的路。如何在 Shake 中解决这个问题?
编辑:问题在于使用getDirectoryFiles
:
有一个目标可以"//*.min.js
正常工作,但getDirectoryFiles "" ["//*.js"]
开始拾取生成的.min.js
文件。
shake-build-system - 默认的等价物是什么:在Shake中
我正在尝试在小型项目中使用 Shake 作为 Make 的替代品。目前它主要用于别名 shell 命令。有没有办法指定默认的假动作?类似于默认的东西:在makefile中。例如,给定:
我想声明,如果没有给定目标,它会运行build
.
haskell - 在 Shake 规则中恢复源文件名
我正在为一个静态网站编写一个构建系统,它的工作方式如下:
- 为每个文件
src/123-some-title.txt
生成一个文件out/123.html
我的问题是,在编写规则时,out/*.html
我没有直接的方法可以src/123-some-title.txt
从目标文件名 () 中恢复源文件名 ( out/123.html
)。
当然,我可以src/
再次读取目录并搜索以 开头的文件123
,但是有没有更好的方法来使用 Shake 来做到这一点?
haskell - 如何使用 Shake 执行 sh 命令
我正在尝试将现有的 makefile 迁移到 Shake,到目前为止,我已经尝试了以下操作(只需创建一个包含目录内容的文件)
当我运行它时,我收到以下错误消息:
我究竟做错了什么?如何执行sh
命令并重定向其输出?
haskell - 如何在 Shake 中定义计时器规则
我试图了解如何使用Shake
以及如何建立新规则。作为练习,我决定实施我所说的backup
规则。
这个想法是如果文件不存在或者文件太旧(让我们超过 24 小时),则生成一个文件。我喜欢将长命令存储在生成文件中并按需运行它们。一个例子是 mysql 备份。唯一的问题是当备份已经存在时,make
什么都不做。为了解决这个问题,我可以
- 在重做新备份之前删除以前的备份,
- 制作备份目标
phony
- 添加一个虚构的
force
依赖项,我可以手动或在 cron 中触摸它。
我想要的是重做备份,如果它超过 24 小时(我可以用一个touch force
in cron 来做)。无论如何,这只是一个可以玩的例子Shake
。我想要的是这样的:
我阅读了文档,但我不知道如何执行此操作或定义规则以及 anAction
是什么。我知道我需要实例化一个Rule
类,但我不知道是什么。
澄清
我不希望备份自动运行,而是仅按需运行,但每 24 小时最多运行一次。
一个示例场景是我在远程机器上有一个生产数据库,本地复制并在本地运行一些耗时的报告。正常的工作流程是
- 下载生产备份
- 用它刷新本地数据库
- 在本地仓库数据库上创建一些非规范化表
- 生成一些报告。
我不是每天都运行报告,而是仅在需要时运行。所以我不想每 24 小时运行一次报告。除了时间位之外,使用 makefile 很容易,它们可以解决,但它再次是一个人为的示例,可以深入了解 Shake 的工作原理。
所以,当我第一次make report
备份数据库时,运行所有内容并生成报告。现在,我想修改报告(因为我正在测试它)。我不需要重新生成备份(也不需要刷新本地数据库)(我们是晚上,我知道直到第二天生产都没有任何变化)
然后第二天,或者下个月,我重新运行报告。这次我需要再次完成备份,并且所有依赖项也需要重新运行。
基本上我需要的规则是
重做时间戳=时间戳<旧
是
重做时间戳 = 时间戳 < 旧 || 现在 > 时间戳 + 24*36000
但我不知道把这条规则放在哪里。
问题更多的是把它放在哪里,而不是如何写它(它在上面)。如果它更容易(解释)我可以有一个规则询问用户(getLine)“你想重做这个目标(是/否)吗?”。
稍后我还将需要一个规则,具体取决于数据库(或特定表)的最后更新。我知道如何从数据库中获取信息,但不知道如何将其集成到 Shake 中。
我可能对 aRule
是什么感到困惑。制定规则是关于如何制定目标(所以它更像是一个食谱)或者我认为是摇动中的行动。在哪里,当我说规则时,我指的是决定是否重新制作目标的规则,而不是如何去做。在 make 中,您没有选择权(它是时间戳),因此没有这样的概念。
shake-build-system - 在 Shake 中查看控制台进度消息
我正在使用 Shake,调用wget
下载文件。如果我在命令行上执行此操作,我会看到一个单行进度条,但是当从 Shake 调用时,我会看到很多行点。举个例子:
我希望它显示单行进度条。