项目通常会有很多操作,比如编译,测试,代码检查,代码格式规整,打包发布等。
操作还有很多细分项,比如编译分调试版,发布版;测试包含单元测试,集成测试,覆盖率测试等。
这种种情况造成了我们需要记忆并调用大量的命令,通过一个文件把这些命令记录下来,并分类标注,能减少重复输入,节省调用时间,避免输入错误,方便新人上手...
Argc 即是一个用注释写 shell
命令行应用的框架,也是一款任务执行器。
你如果你不通过--argc-*
选项激活它的其他模式,Argc 启动后会进入任务执行器模式。
在该模式下,Argc 会先定位 bash
, 然后在当前项目及其父目录中搜索 argcfile
文件,最后调用 bash
执行 argcfile
。
Argc 采用 rust 编写,跨平台,不到 1M 的单可执行文件,无任何依赖,下载下来放到 $PATH 目录下就可以使用
windows 下 argc 自动定位并使用 git 内置的 bash 。
argcfile
就是一个普通的 shell
脚本。
与其他方案 make/makefile
, just/Justfile
, task/taskfile.yaml
比,你不需要再学一门语言、语法。
你还能自由地使用 ls
, rm
, grep
, find
, sed
, awk
等 GNU 工具。不用担心 windows 不兼容。
shell
出现了这么多年,为什么没多少人用它做任务管理? 因为 shell
的参数处理太繁琐了。
Argc 独创地引入了注释标签机制,解决了这个问题。
你只需要编写一个普通的函数,在这个函数上面添加注释 # @cmd [可选帮助信息]
,就定义了一个任务(子命令)。
# @cmd Build project
build() {
echo Build...
}
# @cmd Run tests
# @alias t
test() {
cargo test $@
}
# @cmd Run app
# @arg mode[=dev|prod] Run mode
run() {
if [[ "$argc_mode" = "prod" ]]; then
echo "prod mode"
else
echo "dev mode"
fi
}
# @cmd Start server
# @option --port=5000 Listening port
start() {
PORT=$argc_prot node server.js
}
Argc 提供了 bash
、zsh
、powershell
补全脚本来提示 argcfile
中任务和选项。
有时候任务名太长,输入麻烦,你可以定义任务别名。
# @cmd Run tests
# @alias t,tst
test() {
}
可以使用符号对任务进行分组,例如 foo:bar
foo.bar
foo@bar
。
基于执行顺序
# @cmd
build() { :; }
# @cmd
build:pre() { :; }
# @cmd
build:post() { :; }
基于类别、分组
# @cmd
build@all() { :? }
# @cmd
build@backend() { :? }
# @cmd
build@frontend() { :? }
基于名称空间、范围
# @cmd
app.test() { :? }
# @cmd
app.build() { :? }
比如我们希望在执行 run
之前先执行 install
,之后再执行 clean
,可以这样实现:
# @cmd
install() {
echo "install deps"
}
# @cmd
run() { install;
echo "run app"
clean; }
# @cmd
clean() {
echo "clean build"
}
argc 会自动生成完善的帮助信息
$ argc -h
argcfile
USAGE:
argcfile <SUBCOMMAND>
OPTIONS:
-h, --help Print help information
SUBCOMMANDS:
run Run app
start Start server
test Run tests [aliases: t]
你还可以查看单个任务的帮助信息
$ argc run -h
argcfile-run
Run app
USAGE:
argcfile run [MODE]
ARGS:
<MODE> Run mode [default: dev] [possible values: dev, prod]
OPTIONS:
-h, --help Print help information
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.