1 个不稳定版本
0.2.4 | 2022年4月12日 |
---|
#648 in 构建工具
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实现了这些目标。
特性
- 它不需要你明确声明依赖关系。
- 它可以跟踪就地修改的文件是否需要重新构建。
- 虽然这可以通过Make实现,但它是不方便的。
- 文件哈希值使用hashbrown的哈希器生成(hashbrown用于所有HashMap内部),使用bincode序列化,并在
.make_cache
中缓存,这样我们就可以在不依赖文件系统元数据的情况下跟踪是否需要重新构建文件及其依赖项。 - 规则文件使用TOML编写,并使用Rust的正则表达式语法来匹配和替换文件模式。
- 它是跨平台的。
- 它非常快。
- 使用
WalkParallel
扫描目录(与fd
和ripgrep
相同) - 默认多线程,尽可能自动并行化任务
- 使用
- 你可以使用
--dot
选项生成DOT文件,并查看构建树。
仍需努力
本项目还有更多内容在制作中,希望能名副其实,但我不确定任何东西能否超越Make。这也成为了我学习Rust的同时,完成这个语言尚未实现的功能的项目(cargo-make不是语言无关的,而且根本不支持通配符)。
本项目尚未准备好应对许多用例(例如,单个输入文件的多个依赖,因此您还不能链接您的.o
文件)。目前,如果您只是对单个文件运行任务,它实际上运行得很好,但它缺乏支持这些内容,这对于允许您构建更大项目的更复杂的负载是必要的。
其他类似的语言无关工具
- Make -- 它可能真的是您需要的全部!
- 任务
- 仅仅
依赖项
~10–20MB
~248K SLoC