justfile
24
总安装量
11
周安装量
#15271
全站排名
安装命令
npx skills add https://github.com/oldwinter/skills --skill justfile
Agent 安装分布
claude-code
9
gemini-cli
8
antigravity
8
codex
8
windsurf
7
Skill 文档
Justfile å½ä»¤èªå¨åæè½
å°å¸¸ç¨å½ä»¤ãMakefileãnpm scripts 转æ¢ä¸º Justfileï¼ä¾¿äºæ¥å¸¸å¼ååè¿ç»´å·¥ä½ã
å¿«éå¼å§
å®è£ just
# macOS
brew install just
# Linux
curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash
# éªè¯å®è£
just --version
åºæ¬ä½¿ç¨
just # è¿è¡é»è®¤ recipe
just --list # ååºææ recipes
just <recipe> # è¿è¡æå® recipe
just -n <recipe> # å¹²è¿è¡ï¼åªæ¾ç¤ºå½ä»¤ï¼
工使µç¨å³ç
æ ¹æ®ç¨æ·éæ±éæ©åéç工使µç¨ï¼
ç¨æ·éæ±
âââ å·²æ Makefile â 转æ¢å·¥ä½æµ
âââ å·²æ package.json â npm 转æ¢å·¥ä½æµ
âââ æå¸¸ç¨ shell å½ä»¤ â å½ä»¤æ´ç工使µ
âââ æ°é¡¹ç®éè¦èªå¨å â æ¨¡æ¿çæå·¥ä½æµ
âââ éè¦äºè§£è¯æ³ â æ¥é
references/syntax.md
1. Makefile 转æ¢
å°ç°æ Makefile 转æ¢ä¸º Justfileã
èªå¨è½¬æ¢
python scripts/makefile_to_just.py Makefile justfile
æå¨è½¬æ¢è¦ç¹
- ç§»é¤
.PHONY声æï¼just é»è®¤é½æ¯ phonyï¼ $(VAR)â{{var}}$(shell cmd)â`cmd`- ä¿æ
@åç¼ï¼é黿§è¡ï¼ - æä»¶ä¾èµéè¦ç§»é¤ææ¹ä¸º recipe ä¾èµ
转æ¢ç¤ºä¾
# Makefile
.PHONY: build test
VERSION := $(shell git describe --tags)
build:
go build -ldflags "-X main.version=$(VERSION)"
test: build
go test ./...
转æ¢ä¸ºï¼
# justfile
version := `git describe --tags`
build:
go build -ldflags "-X main.version={{version}}"
test: build
go test ./...
2. npm scripts 转æ¢
å° package.json ä¸ç scripts 转æ¢ä¸º Justfileã
èªå¨è½¬æ¢
python scripts/npm_to_just.py package.json justfile
转æ¢ç¤ºä¾
{
"scripts": {
"dev": "vite",
"build": "vite build",
"test": "vitest",
"lint": "eslint ."
}
}
转æ¢ä¸ºï¼
set dotenv-load
default: dev
dev:
npm run dev
build:
npm run build
test:
npm run test
lint:
npm run lint
# æè
ç´æ¥ä½¿ç¨åå§å½ä»¤
dev:
vite
build:
vite build
3. Shell å½ä»¤æ´ç
å°å¸¸ç¨ shell å½ä»¤æ´ç为 Justfileã
ä» history æå
python scripts/shell_to_just.py --history justfile
ä»æä»¶è¯»å
# å建å½ä»¤å表
cat > commands.txt << 'EOF'
docker-compose up -d
docker-compose logs -f
kubectl get pods -n production
kubectl logs -f deployment/api
EOF
python scripts/shell_to_just.py commands.txt justfile
æå¨æ´ç模å¼
æ¶éç¨æ·å¸¸ç¨å½ä»¤ï¼æåè½åç»ï¼
# === Docker ===
up:
docker-compose up -d
down:
docker-compose down
logs service="":
docker-compose logs -f {{service}}
# === Kubernetes ===
pods:
kubectl get pods -n production
logs-k8s pod:
kubectl logs -f {{pod}} -n production
4. é¡¹ç®æ¨¡æ¿çæ
æ ¹æ®é¡¹ç®ç±»åçæåéç Justfile 模æ¿ã
è¯å«é¡¹ç®ç±»å
æ£æ¥é¡¹ç®æä»¶æ¥è¯å«ç±»åï¼
| æä»¶ | 项ç®ç±»å |
|---|---|
requirements.txt, pyproject.toml |
Python |
package.json |
Node.js |
go.mod |
Go |
Cargo.toml |
Rust |
docker-compose.yml |
Docker |
kubernetes/, k8s/ |
Kubernetes |
terraform/ |
Terraform |
çææ¨¡æ¿
æ¥é
references/templates.md è·åå类项ç®ç宿´æ¨¡æ¿ï¼
- Python é¡¹ç®æ¨¡æ¿
- Node.js é¡¹ç®æ¨¡æ¿
- Go é¡¹ç®æ¨¡æ¿
- DevOps/è¿ç»´æ¨¡æ¿
- éç¨å¼å模æ¿
- æ°æ®ç§å¦/ML 模æ¿
å¸¸ç¨ Recipe 模å¼
另忰ç Recipe
# å¿
éåæ°
deploy env:
kubectl apply -k overlays/{{env}}
# é»è®¤å¼åæ°
build mode="debug":
cargo build --{{mode}}
# å¯ååæ°
test *args:
pytest {{args}}
ä¾èµå ³ç³»
# ç®åä¾èµ
release: build test
./deploy.sh
# 另忰çä¾èµ
push: (build "release")
docker push myapp:latest
æ¡ä»¶æ§è¡
# 跨平å°
[linux]
install:
apt install mypackage
[macos]
install:
brew install mypackage
# 确认æç¤º
[confirm("ç¡®å®è¦é¨ç½²å°ç产ç¯å¢å?")]
deploy-prod:
kubectl apply -k overlays/prod
åç»
[group('development')]
dev:
npm run dev
[group('development')]
watch:
npm run watch
[group('testing')]
test:
npm run test
èæ¬æ¨¡å¼
[script]
setup:
#!/usr/bin/env bash
set -euo pipefail
echo "Setting up environment..."
for pkg in curl git make; do
command -v $pkg || echo "Missing: $pkg"
done
æä½³å®è·µ
1. æä»¶ç»ç»
# 头é¨ï¼è®¾ç½®ååé
set dotenv-load
set shell := ["bash", "-cu"]
project := "myapp"
version := `git describe --tags --always`
# é»è®¤ recipe
default: dev
# æåè½åç»ï¼ç¨æ³¨éåé
# === å¼å ===
dev: ...
# === æå»º ===
build: ...
# === æµè¯ ===
test: ...
2. å½å约å®
- 使ç¨å°å忝åè¿å符ï¼
build-prod - å¨è¯å¼å¤´ï¼
run,build,test,deploy - ç§æ recipe ç¨ä¸å线ï¼
_helper
3. ææ¡£æ³¨é
# å¯å¨å¼åæå¡å¨ (ç«¯å£ 3000)
dev:
npm run dev
4. åé使ç¨
# ä»ç¯å¢åé读åï¼å¸¦é»è®¤å¼
env := env("ENV", "development")
# ä»å½ä»¤è·å
commit := `git rev-parse --short HEAD`
# æ¡ä»¶åé
mode := if env == "prod" { "release" } else { "debug" }
åèèµæ
references/syntax.md– Justfile 宿´è¯æ³åèreferences/templates.md– åç±»é¡¹ç®æ¨¡æ¿éåscripts/makefile_to_just.py– Makefile 转æ¢èæ¬scripts/npm_to_just.py– npm scripts 转æ¢èæ¬scripts/shell_to_just.py– Shell å½ä»¤æåèæ¬