介绍
just 是一个 rust 版本的 make 替代品,可以用来给项目的一些命令配置便捷的执行方式。类似 npm 中的 npm run … 的概念,但是更加强大。且 just 的配置文件语法类似 yaml,也使得结构清晰易懂。
安装
在 安装包 - Just 用户指南 上列出了多种安装方式,下面是 Debian 安装的示例:
wget -qO - 'https://proget.makedeb.org/debian-feeds/prebuilt-mpr.pub' | gpg --dearmor | sudo tee /usr/share/keyrings/prebuilt-mpr-archive-keyring.gpg 1> /dev/null
echo "deb [arch=all,$(dpkg --print-architecture) signed-by=/usr/share/keyrings/prebuilt-mpr-archive-keyring.gpg] https://proget.makedeb.org prebuilt-mpr $(lsb_release -cs)" | sudo tee /etc/apt/sources.list.d/prebuilt-mpr.list
sudo apt update
sudo apt install just -y
杂项
别名
可以在 Shell 配置文件中设置别名:
alias j=just
补全
参考:Shell Completion Scripts - Just Programmer’s Manual
可以在 Shell 配置文件里添加 just 的自动补全,下面是 zsh 的示例:
just --completions zsh > just.zsh
如果是 ohmyzsh,可以在这样:
mkdir $ZSH_CUSTOM/plugins/just
just --completions zsh > $ZSH_CUSTOM/plugins/just/_just
然后在 ~/.zshrc 里添加 plugins:
plugins=(just ...)
VSCode 扩展
要让 VSCode 能够给 plaintext 文件配置高亮,可以安装 skellock.just 插件。
plaintext 配置
Tip
中文文档里叫做 “配方”,但是对于我来说,“配置” 更好理解一点,所以下面的的 “配置” 都可以理解为中文文档里所说的 “配方”。
默认配置
如果在命令行里直接调用 just 的时候,just 会执行 plaintext 配置文件里的第一个配置。在如下的配置列表里,会执行 build 配置:
build:
echo Building…
test:
echo Testing…
lint:
echo Linting…
可以在你当前所在目录下的 plaintext 文件里(如果没有的话,就手动创建),填写上述内容,然后在命令行里输入 just。
此外,也可以指定默认要执行的操作,如果想要修改 just 默认行为的话。下面的示例是默认依次执行 lint、build、test 配置:
default: lint build test
build:
echo Building…
test:
echo Testing…
lint:
echo Linting…
或者如果想默认列出能执行的配置:
default:
just --list
列出可调用的配置
前面已经介绍了可以使用 just --list 列出配置,此外也可以用 just --summary 以更简洁的方式列出配置。
还可以传递 --unsorted 让配置依照 plaintext 中出现的顺序排列。
配置别名
可以在 plaintext 里给配置设置别名,以便更方便调用:
alias b := build
build:
echo 'Building!'
just b
设置
可以在 plaintext 里设置一些变量,来修改执行的方式。
读取环境变量
# 当设置此项时表示允许读取 .env 文件作为环境变量
set dotenv-load
设置环境变量
# 当设置此项时表示导出所有变量作为环境变量
set export
# >>> 定义和使用环境变量示例 >>>
a := "hello"
@foo b:
echo $a
echo $b
# <<< 定义和使用环境变量示例 <<<
位置参数
# 当设置此项时表示位置参数
set positional-arguments
示例 1
定义 run 配置,该配置接收两个参数:
@run example1 example2:
echo $0
echo $1
echo $2
$0是命令的名称,在这里是 foo$1是用户传递的第一个参数$2是用户传递的第二个参数
调用示例:
just run 参数 1 参数 2
示例 2
对于 sh 系的 Shell(如 bash、zsh),$@ 会展开成传给配置的传值参数,从 $1 开始。如果使用 "" 包裹 $@ 参数,即使没有传递参数值,也会使用一个空白字符串替代 $1。
@test *args='':
bash -c 'while (( "$#" )); do echo - $1; shift; done' -- "$@"
调用示例:
just test 参数1 参数2
返回:
- 参数1
- 参数2
调用示例:
just test
返回:
-
Shell
shell 参数可以用来修改配置执行时的内容。
Python
比如在想在配置里执行 Python 代码,可以像下面这样:
# use python3 to execute recipe lines and backticks
set shell := ["python3", "-c"]
# use print to capture result of evaluation
foos := `print("foo" * 4)`
foo:
print("Snake snake snake snake.")
print("{{foos}}")
just 会把要执行的命令作为一个参数进行传递。许多 Shell 需要一个额外的标志,通常是 -c,以使它们评估执行第一个参数。
调用:
just foo
返回:
print("Snake snake snake snake.")
Snake snake snake snake.
print("foofoofoofoo")
foofoofoofoo
Zsh
set shell := ["zsh", "-uc"]