
用 justfile 告别命令记忆跨平台命令运行器实战【免费下载链接】just Just a command runner项目地址: https://gitcode.com/GitHub_Trending/ju/just新人第一次拉下仓库问先执行哪条命令得到的答案往往是一串只有作者记得住的命令链装依赖、初始化环境、构建、跑测试每条还带着若干开关记不全、也验证不了。just 就是一个轻量级命令运行器command runnerjustfile 是它读取的配置文件——把上述命令链写成食谱recipe存进文本文件敲just即可列出并执行。定位类似 Makefile但语法更接近自然书写报错信息也更易读。装好之后just --list会把项目里所有可执行的操作列出来命令链从此有了唯一权威出处。下面从一个最小 justfile 出发逐层叠加能力。写出第一个 justfile食谱、依赖与参数传递最小可运行的文件长这样build: cargo build test: cargo test release: build echo Preparing release ./deploy.sh几条规则覆盖大部分场景食谱名加冒号下方缩进行为命令每一行都在独立 shell 中执行release: build声明依赖build 先行完成前缀不打印命令本身只留输出-前缀失败也不中断继续跑下一行想让某步在本体执行完之后触发用写后续依赖a: echo A d: echo D # a 先执行d 是后续依赖在本体执行完才运行 b: a d echo B body带参数的食谱把命令行输入变成任务配置greet name: echo Hello, {{name}} deploy targetdev *flags: ./deploy.sh --target {{target}} {{flags}}just deploy prod --verbose会把prod传给target--verbose落入变长参数flags。名字以_开头的食谱不出现在--list中适合做只被依赖的内部步骤。justfile 变量与表达式把硬编码变成配置满屏的路径和版本字面量是维护成本的来源。变量语法本身很短PYTHON : python3 SRC : src LOG_DIR : var / log # / 是路径拼接 COMMIT : git rev-parse --short HEAD # 反引号执行命令取输出 PYTHON : if os_family() windows { py.exe } else { python3 }{{...}}占位符里还能直接写条件echo {{ if fast { -f } else { }}}这样的行内分支是常见写法。常用的内置函数函数用途os_family()返回unix或windows跨平台分支的入口env_var_or_default(NAME, x)读环境变量缺失时取默认值join(a, b, c)多段拼成完整路径trim(s)/trim_end(s)去掉首尾空白quote(s)转义为 shell 安全形式invocation_directory()实际调用just的目录examples/kitchen-sink.just 几乎把每种表达式和函数都示范了一遍GRAMMAR.md 则是完整语法参考。跨平台 just 任务配置要点同一份文件跑通 Windows 和 macOS跨平台的麻烦通常来自两点shell 差异与路径差异。前者靠文件头部设置解决set shell : [bash, -euo, pipefail] set windows-shell : [powershell.exe, -NoLogo, -Command]非 Windows 平台用前者执行每一行Windows 上自动换用后者正文无需改动。路径差异用os_family()分支官方示例是一份 Python 项目模板python_dir : if os_family() windows { ./.venv/Scripts } else { ./.venv/bin } python : python_dir / python3 bootstrap: {{ system_python }} -m venv .venv {{ python }} -m pip install --upgrade pip完整文件见 examples/cross-platform.just。另一个少有人知的技巧食谱首行写 shebang整个本体就按脚本来跑而不是逐行拼 shellpublish: #!/usr/bin/env bash set -euxo pipefail git tag -a $VERSION cargo publish just 项目自己的 justfile 的publish食谱就用了这个写法连多语言脚本食谱Python、Node、Ruby 等都放在了同一份文件里。环境变量与 .dotenv吸收每个人的机器差异数据库地址、端口、密钥这类值不该提交进仓库但每个人本地都有。set dotenv-load让 just 在启动时自动读取当前目录的.envset dotenv-load.env内容DATABASE_ADDRESSlocalhost:6379 SERVER_PORT1337serve: echo Starting server on port $SERVER_PORT ./server --database $DATABASE_ADDRESS --port $SERVER_PORT还有一个容易踩的坑食谱每行是全新 shell上一行导出的环境变量下一行看不见。跨行共享要么写成 just 变量再export要么放进.envexport NODE_ENV : production test: ./bin/test # 这里能直接读到 $NODE_ENVset export则把文件中所有 just 变量整体变成食谱的环境变量二选一即可。justfile 别名与模块组织长文件食谱多到二十个以后--list的输出开始难读。别名和模块各司其职alias b : build alias t : test mod deploy # 依次查找 deploy.just、deploy/mod.just 等 alias d : deploy::productionjust d等价于just deploy production。模块名foo的查找顺序是foo.just、foo/mod.just、foo/justfile、foo/.justfile也可以用mod name path.just显式指定文件。各模块的变量互不可见、设置彼此独立——这种隔离正是把部署、文档、CI 任务拆成独立文件的理由。just 调试与排查先验证再执行改动命令前先确认它会被怎样执行just --list # 列出全部食谱与参数默认值 just --dry-run build # 打印将执行的命令但不真正运行 just --dump # 展示展开后的完整 justfile just -n test # 干跑且静默输出行前缀速查前缀效果cmd不打印命令本身-cmd失败不中断-cmd两者兼得命令失败时报错会带上 justfile 行号与实际使用的 shell定位很快。怀疑是变量展开出错时用just --dump查看表达式求值后的真实内容或者写一个调试食谱echo出关键变量。 团队推广的实用顺序先让 everyone 跑一遍just --list对齐操作清单再逐步把口头传承的命令迁进文件。接下来可以做什么挑出你每天敲得最多的 3~5 条命令序列写进项目 justfile先接上依赖与变量进阶特性按需再补改动任何命令前先just --dry-run过目合并前跑一次just --dump确认表达式展开无误有跨平台或多人协作需求时set windows-shellos_family()处理 shell 与路径差异部署和文档拆成模块.env吸收机器间差异【免费下载链接】just Just a command runner项目地址: https://gitcode.com/GitHub_Trending/ju/just创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考