欢迎光临
我们一直在努力

Just及Justfile:简介、实战

概述

官网,Rust实现、开源(GitHub,36K Star,851 Fork)跨平台、轻量级命令行工具;类似于传统Make工具,提供一种简单高效的方式来管理项目任务,不是构建系统。中文文档。

Make是给C项目做增量编译用的,其核心逻辑是比对文件时间戳,决定哪些东西需要重新构建。但绝大多数团队用于跑测试、部署、清理、启动开发服务器。每次都得写.PHONY声明。

特性:

  • 错误信息清晰具体
  • 支持命令行参数和环境变量
  • 自动补全功能
  • 无需声明.PHONY目标
  • 可从项目任意子目录调用,不用切到根目录

优势

  • 避免Make的"up to date"问题
  • 更友好的错误信息
  • 内置函数和环境变量支持
  • 更简洁的变量系统
  • 无需声明伪目标

函数

内置函数

函数描述
arch() 指令集结构
os() 操作系统
os_family() 操作系统系列
env_var(key) 获取名称为key的环境变量,如果不存在则终止
env_var_or_default(key, default) 获取名称为key的环境变量,如果不存在则返回default
invocation_directory() 获取just被调用时当前目录所对应的绝对路径
justfile() 取得当前justfile的路径
justfile_directory() 取得当前justfile文件父目录的路径
just_executable() just可执行文件的绝对路径
quote(s) 用单引号包裹字符串并转义内部单引号
replace(s, from, to) 替换字符串中的所有匹配项
replace_regex(s, regex, repl) 使用正则表达式替换字符串
trim(s) 移除首尾空白字符
trim_end(s) 移除尾部空白字符
trim_end_match(s, substr) 移除匹配的后缀
trim_end_matches(s, substr) 重复移除匹配的后缀
trim_start(s) 移除首部空白字符
trim_start_match(s, substr) 移除匹配的前缀
trim_start_matches(s, substr) 重复移除匹配的前缀
capitalize(s) 首字母大写其余小写
kebabcase(s) 转换为kebab-case
lowercamelcase(s) 转换为lowerCamelCase
lowercase(s) 转换为全小写
shoutykebabcase(s) 转换为SHOUTY-KEBAB-CASE
shoutysnakecase(s) 转换为SHOUTY_SNAKE_CASE
snakecase(s) 转换为snake_case
titlecase(s) 转换为Title Case
uppercamelcase(s) 转换为UpperCamelCase
uppercase(s) 转换为全大写
absolute_path(path) 将相对路径转为绝对路径
extension(path) 获取文件扩展名
file_name(path) 获取文件名(含扩展名)
file_stem(path) 获取文件名(不含扩展名)
parent_directory(path) 获取父目录路径
without_extension(path) 获取不含扩展名的路径
clean(path) 简化路径(移除冗余部分)
join(a, b…) 拼接路径(自动处理分隔符)
path_exists(path) 检查路径是否存在
error(message) 终止执行并显示错误消息
sha256(string) 计算字符串的SHA-256哈希值(十六进制)
sha256_file(path) 计算文件的SHA-256哈希值(十六进制)
uuid() 生成随机UUID

解读:

  • arch()输出:aarch64、arm、asmjs、hexagon、mips、msp430、powerpc、powerpc64、s390x、sparc、wasm32、x86、x86_64、xcore
  • os()输出:android、bitrig、dragonfly、emscripten、freebsd、haiku、ios、linux、macos、netbsd、openbsd、solaris、和windows
  • os_family()输出:unix、windows

语法

或叫功能,包括:

  • 变量:通过:=进行赋值,并在配方中通过{{变量名}}方式进行引用;可在命令行传参覆盖
  • @前缀:不显示命令本身,只显示输出
  • 加载.env文件:在justfile顶部加上:set dotenv-load
  • 依赖机制:在配方名后面列出依赖的配方就行。

install:
npm ci
build: install
npm run build
test: build
npm test

运行 just test时,Just 会先跑 install,再跑 build,最后跑 test。依赖关系清晰,执行顺序自动解析。可用 –no-deps 跳过依赖。

  • 支持配方带参数:

deploy target:
./scripts/deploy.sh {{target}}
# 参数设置默认值
build mode="release":
cargo build –{{mode}}

执行命令

just deploy staging
just deploy production

  • 支持Shebang配方:

count-files:
#!/usr/bin/env python3
import os
print(len(os.listdir(".")))

Just会把配方内容存成临时文件然后用Shebang指定的解释器去跑。

  • 可通过反引号来执行系统命令
  • 条件判断:

build_type := if os() == "windows" { "exe" } else { "bin" }

arch := if arch() == "x86_64" {
"amd64"
} else if arch() == "aarch64" {
"arm64"
} else {
error("Unsupported architecture")
}
# 反引号
current_branch := `git branch –show-current`

Justfile

语法受make启发

特性JustMake
语法 简洁直观 较为复杂
跨平台 原生支持 需要兼容层
错误处理 清晰详细 有时晦涩
变量作用域 统一简单 多种类型
自动补全 完善支持 有限
.PHONY声明 不需要 需要
环境变量 内置支持 需要额外处理
现代功能 条件、函数等 有限

实战

安装:

brew install just
winget install –id Casey.Just
cargo install just

示例:

# 注释
build:
echo "Building project…"
cargo build

test:
echo "Running tests…"
cargo test

命令行使用示例:

# 列出所有配方,以_开头的配方会被隐藏
just –list
just –list –unsorted
just –summary
# 查看某个配方的具体内容
just –show <recipe>
# 用交互式选择器选配方
just –choose

用于Java项目:

# 构建应用
build:
./mvnw clean package
# 构建 Docker 镜像(依赖 build,会先执行 build)
docker: build
docker build -t my-app:latest .
docker push my-app:latest
# 本地运行(依赖 build)
run: build
./mvnw spring-boot:run -Dspring-boot.run.profiles=local

用于Node.js项目:

install:
npm ci
build: install
npm run build
test: build
npm test

生态

  • vim-just:插件可为vim提供justfile语法高亮显示
  • just-mode:可为justfile提供语法高亮和自动缩进
赞(0)
未经允许不得转载:171主机测评 » Just及Justfile:简介、实战
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址