#task #build #make

构建 make_ultra

一个简单的任务运行器,它跟踪文件更改并基于规则并行运行命令

1 个不稳定版本

0.2.4 2022年4月12日

#648 in 构建工具

MIT OR Apache-2.0 OR Unlicense

25KB
426

Make Ultra

Make Ultra是一个任务运行器,适用于在文件更改时运行特定命令。

查看以下规则文件(使用TOML编写)

# saved as makeultra.toml

folders = ["Foo", "Bar"]

[[rule]]
# rules use rusty regex: https://docs.rs/regex/*/regex/#syntax
from = '(?P<name>.*)\.js$'
to = '$name.min.js'
exclude = '\.min\.js$'
# For all commands: $i = input file; $o = output file
command = 'terser $i -o $o'

[[rule]]
from = '(?P<name>.*)\.min\.js$'
to = '$name.min.js.gz'
command = 'zopfli $i'

[[rule]]
from = '(?P<name>.*)\.min\.js$'
to = '$name.min.js.br'
command = 'brotli -f $i'

# Optimize png files in-place, only re-running when you modify them:
[[rule]]
from = '(?P<name>.*\.png)$'
to = '$name'
command = 'optipng -clobber -fix -quiet -strip all $i'

为什么还需要另一个?

我需要比Grunt和Gulp更快的工具,同时语法比Make简单,并且能跟踪就地修改的文件。Make Ultra实现了这些目标。

特性

  1. 它不需要你明确声明依赖关系。
    • 目前,你可能需要使用 exclude 来确保你的规则不会过于贪婪。自动确定合适的规则正在计划中。
    • 顺便说一句:它不是一个真正的beta构建系统,但Make Ultra借鉴了beta构建系统的思想。它首先处理依赖关系,然后递归地遍历到它们的依赖项。
  2. 它可以跟踪就地修改的文件是否需要重新构建。
    • 虽然这可以通过Make实现,但它是不方便的
  3. 文件哈希值使用hashbrown的哈希器生成(hashbrown用于所有HashMap内部),使用bincode序列化,并在.make_cache中缓存,这样我们就可以在不依赖文件系统元数据的情况下跟踪是否需要重新构建文件及其依赖项。
  4. 规则文件使用TOML编写,并使用Rust的正则表达式语法来匹配和替换文件模式。
  5. 它是跨平台的。
  6. 它非常快。
    • 使用WalkParallel扫描目录(与fdripgrep相同)
    • 默认多线程,尽可能自动并行化任务
  7. 你可以使用--dot选项生成DOT文件,并查看构建树。

仍需努力

本项目还有更多内容在制作中,希望能名副其实,但我不确定任何东西能否超越Make。这也成为了我学习Rust的同时,完成这个语言尚未实现的功能的项目(cargo-make不是语言无关的,而且根本不支持通配符)。

本项目尚未准备好应对许多用例(例如,单个输入文件的多个依赖,因此您还不能链接您的.o文件)。目前,如果您只是对单个文件运行任务,它实际上运行得很好,但它缺乏支持这些内容,这对于允许您构建更大项目的更复杂的负载是必要的。


其他类似的语言无关工具

依赖项

~10–20MB
~248K SLoC