justfile 快速指南:5 分钟把常用命令变成 recipe
【免费下载链接】just🤖 Just a command runner项目地址: https://gitcode.com/GitHub_Trending/ju/just
你在一个仓库里干活,构建命令是cargo build --release && cp target/release/app dist/,每次都要手敲一遍,还总差一点。写进 README 也没人看。just 就是干这个的:把命令写进项目根目录的 justfile,团队里所有人统一跑just build就行。
just 是什么?和 Makefile 有什么区别
just 是一个轻量级命令运行器(command runner):你在 justfile 这个任务脚本里定义一个个 recipe,然后用just <recipe名>一条命令执行,不用背参数顺序。
| 选择 | 优点 | 代价 |
|---|---|---|
| Makefile | 系统自带、生态成熟 | Tab 缩进限制多,报错信息不友好 |
| 纯 Shell 脚本 | 灵活度最高 | 要自己写 CLI、做任务分发 |
| npm scripts | 前端生态顺手 | 绑定 Node,非 JS 项目用不上 |
| just | 语法简单、报错可读,自带参数与跨平台 | 需要单独安装 |
🔧 三分钟上手:justfile 安装与第一个任务
先装 just:
cargo install just # macOS 也可以 brew install just在项目根目录建一个 justfile,写第一个 recipe:
hello name="world": @echo "hello, {{name}}"然后运行:
$ just hello hello, world装、写、跑,一个最小闭环就通了。想看到所有可用任务,随时just --list。
一个例子读懂语法
下面是一个小型 Rust 项目的完整 justfile,覆盖变量、依赖、参数和命令前缀:
BIN_NAME := "demo" OUT_DIR := "dist" / BIN_NAME # 反引号里执行命令,输出作为变量值 GIT_SHA := `git rev-parse --short HEAD` test *flags="--verbose": cargo test {{flags}} # build 依赖 clean,先跑 clean 再跑自己的命令 build: clean cargo build --release mkdir -p {{OUT_DIR}} cp target/release/{{BIN_NAME}} {{OUT_DIR}}/ clean: @cargo clean @echo "构建产物已清理" # - 前缀:这一步失败也不中断 publish: build -curl -fsS https://example.com/notify对着它看这张速查表:
| 写法 | 含义 |
|---|---|
VAR := "值" | 字符串变量赋值 |
SHA := \命令`` | 执行命令,把输出存进变量 |
"dist" / BIN_NAME | 路径拼接 |
b: a | b 依赖 a,a 先执行 |
name="world" | 带默认值的参数 |
*flags | 变长参数 |
@命令 | 只显示输出,不显示命令本身 |
-命令 | 该步失败也继续往下跑 |
⚡ just 特性速查
内置函数
| 函数 | 作用 | 例子 |
|---|---|---|
os() | 当前系统名 | 返回linux/windows |
env_var("NAME") | 读环境变量 | env_var("HOME") |
quote(s) | 转成 shell 安全字符串 | quote("a b") |
file_name(p) | 取路径里的文件名 | file_name("/a/b/c.txt")→c.txt |
if/else 条件分支
PYTHON := if os() == "windows" { ".venv/Scripts/python" } else { ".venv/bin/python" }跨平台构建脚本的 shell 设置
set shell := ["sh", "-c"] set windows-shell := ["powershell.exe", "-NoLogo", "-Command"]dotenv 加载
set dotenv-load # 自动读取当前目录的 .env deploy: curl https://api.{{env_var("STAGE")}}.example.comalias 与 mod
alias t := test # 以后跑 just t 即可 mod deploy/aws # 引入 deploy/aws.just,可用 deploy::aws::xxx 调用完整写法可以看 examples/ 里的 kitchen-sink 示例。
团队落地建议:justfile 怎么组织
- 文件按固定顺序排:
set设置 → 变量 → alias → recipe,高频 recipe 放最上面。 - 命名:recipe 用小写加连字符(如
build-docs),不想暴露的内部 helper 用_开头。 - 排查先看清单:
just --list列出全部任务。 - 想看某任务会执行什么但不真跑:
just --dry-run build。 - 想确认变量最终取到什么值:
just --evaluate会展开全部变量。
⚠️ 常见坑
- 缩进混用空格和 Tab原因:缩进不一致会直接报错;解法:全文统一 2 个空格,别中途切换。
- 字符串里带引号等特殊字符原因:普通字符串容易把解析器搞乱;解法:用
quote()转义,或多行场景用三引号字符串。 - Windows 上行为不同原因:shell 和路径分隔符都和 Linux/macOS 不一样;解法:文件顶部设
set windows-shell,需要分支的地方用os()判断。
进阶阅读
- 官方文档:中文文档、英文文档
- 示例集合:examples/,从跨平台 Python 项目到 pre-commit 工作流都有
- 想抠语法细节:src/parser.rs
把你今天敲得最勤的那条命令变成 recipe,剩下的交给just。
【免费下载链接】just🤖 Just a command runner项目地址: https://gitcode.com/GitHub_Trending/ju/just
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考