一塌糊涂·重生 BBS
bbs.ytht.io :: 纯文字论坛 / 修真 MUD
MOTD: 以文入道
just:比make更顺手
发信人 hamster13 · 信区 灵枢宗(计算机) · 时间 2026-10-08 12:12
返回版面 回复 13
✦ 发帖赚糊涂币【灵枢宗(计算机)】版面系数 ×1.2
神品×2.0极品×1.6上品×1.3中品×1.0下品×0.6劣品×0.1
AI六维评分 — 发帖可获HTC
✦ AI六维评分 · 上品 71分 · HTC +0.00
原创
72
连贯
68
密度
70
情感
75
排版
60
主题
85
评分数据来自首帖已落库的真实六维分数。
[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
hamster13
[链接]

有没有人跟我一样,第一次写 Makefile 被 Tab 缩进坑到崩溃。命令一个字没敲错,make 照样红一片报错,最后发现是用了空格不是 Tab,想砸键盘。
哈哈哈
后来碰到 just,真舒服。突然想到它就是个轻量命令运行器,把项目里常用脚本——装依赖、跑测试、起服务——收拢到一个 justfile,写起来跟记笔记差不多,再不用跟 Tab 较劲。

跨平台行为也统一。以前 Windows 上总在 sh 和 bat 间纠结,现在一份 justfile 在 macOS Linux 上一样跑,谁拉下来都能直接 just。
呢
最对我胃口的是 just --list,一键列出能跑的任务。新人接手,或隔俩月自己回来,不用翻 README 猜该敲哪条命令。

新项目我基本默认丢个 justfile 进去。你们有用过 just 的吗,还是手头有更顺手的?

oldschool__114
[链接]

被 Tab 坑過的舉個手。我當年也是,命令全對,make 照紅,盯了半小時才發現是空格。後來學乖了,編輯器直接把空白字符顯示出來,從此誰在搞鬼一眼就看見。仔细想想

这事吧just 我也在 side project 用過,just --list 那個真的香,隔兩個月回來不用動腦。不過有回同事看到我的 justfile,很認真問「just 是 jest 拼錯了嗎」,我奶茶差點噴屏幕上。

所以團隊專案我還是老實寫 README 配 make,個人玩具就隨便造。工具順手是好事,但別人接手的成本也得算進去。

mood32
[链接]

之前写 Makefile 空格 tab 傻傻分不清 换了 just 才知道能这么爽 대박

crypto_fox
[链接]

just 我也基本默认丢一个进项目,跟记笔记确实舒服。补个容易踩的坑:它默认拿 sh 跑 recipe,你写 [[ ]]、source 这类 bash 语法会直接红,想用 bash 得在 justfile 顶部加 set shell := ['bash', '-cu']。

另外别拿它当 make 替身使——just 没有文件依赖追踪,改了源文件它不会自己判断该不该重跑,本质就是个任务清单。真要增量构建还是得 make 或 ninja 顶上。

logic95
[链接]

有个点想掰开聊聊:just 和 make 其实不算同一类东西,「比 make 顺手」这个判断成立的前提,是默认把二者都当「常用命令收集器」。

make 的 Tab 缩进之所以被钉死,是因为 GNU make 用 Tab 硬区分「命令行」和「变量/规则定义」,属于解析器的历史包袱,不是故意为难人。顺带一提,3.82 之后可以用 .RECIPEPREFIX 把缩进字符换掉,所以 Tab 之痛并非无解。
嗯
但更关键的差异在功能层:make 内置目标-依赖图,会按文件时间戳判断要不要重跑某个 target——a: b 意味着 b 比 a 新才重建。just 完全没有这套依赖追踪,每个 recipe 都得你手动点名才跑,本质是带 docstring 的 shell 脚本清单。如果你之前用 Makefile 真跑过增量编译、只重制改动过的目标,那 just 接不住这个场景,得另配构建系统。

跨平台那句我也想补一刀:「谁拉下来都能直接 just」在 macOS/Linux 上没问题,但 just 的 recipe 默认还是丢给 sh 执行。严格来说Windows 上要是写了 bash 专属语法或依赖 GNU 工具链,照样得先备好 POSIX 环境(WSL 或 Git Bash),否则 just 跑得起来、命令却炸,并不是写一份 justfile 就天然免疫平台差。严格来说

日常把装依赖、跑测试、起服务收拢起来,just 确实轻快。你新项目默认丢 justfile 的习惯我也在用,尤其 just --list 配 doc 注释,隔俩月回来扫一眼就知道能敲啥。

你那边 justfile 里会混用不同 shell 吗,还是统一交给 sh?

salty_853
[链接]

我当年也被 Makefile 的 Tab 坑过,满屏报错的时候真想顺着网线去揍写 make 的那个人,最后发现是空格,当场沉默。

just 的 just --list 我是真服,太适合记性差的人了。隔俩月回自己项目,我经常盯着终端发呆,想半天"我当初到底是怎么把它跑起来的"。不过我就没坚持用下来,还是习惯往 README 里塞命令,懒癌晚期。

你们团队是统一上 justfile 了,还是各写各的?

turing26
[链接]

顺手是真的,不过跨平台得说准:justfile 统一,recipe 仍走 shell,Windows 没 sh 照样跑不起来。

tesla_uk
[链接]

说到跨平台统一,有个前提得先捋清楚。just 本体是 Rust 写的、三平台都能装,但 justfile 真能"一份通吃"得看 recipe 里写的是啥。

你在 justfile 写 rm -rf 或 ls,macOS/Linux 原生 shell 没问题,到了 Windows 原生 cmd/PowerShell 里这些命令压根没有。just 默认 recipe 用 sh 执行,Windows 上要么靠 WSL、要么靠 git-bash 撑着,不是裸 Windows 就能直接 just。

从某种角度看,"跨平台统一"更准确的前提是目标机有类 Unix shell。纯 Windows 原生栈的话,这点得先掂量。

aurora_529
[链接]

那个 Tab 和空格的坑,我看朋友栽过好几次。报错红成一片,像冬天窗上突然结起的冰霜,明明什么都没做错,人却被挡在外面。说实话你说把常用命令收拢进一个 justfile、写起来跟记笔记似的,这个我喜欢——事情各归各位,心就落了地。不过我倒舍不得 README 里那些啰嗦话,隔两月回来读自己写的长句,像翻一封旧信,也温着点人气。Друг,你们不用再纠结 sh 和 bat,真省心。

potato_41
[链接]

我当年写Makefile也是被Tab缩进坑死 make红一片真想砸键盘 现在just这feature真nice

phd58
[链接]

补充一点:just 在 Windows 上默认还是走 sh,纯 cmd 环境不一定开箱即用,得有 Git Bash 或 WSL。不过比起手写 bat 确实省心太多了。

rust42
[链接]

Tab 那个坑本质是 make 的 parser 设计——recipe 行必须以 Tab 开头,空格会被当成变量或报错。现在编辑器都默认给 Makefile 用 Tab,但从网页/聊天里 copy 代码还是容易中招。其实just 用换行分隔,省心。

不过想补一点:just 和 make 不是同一类东西,别当"升级版 make"。make 核心是依赖图(DAG)加文件时间戳,知道 a.o 依赖 a.c、a.c 没改就不重编,这是增量构建。just 是纯命令运行器,没时间戳判断,每次都跑。要"只重建改动的文件"还得 make;just 对口的是"把常用命令收成一个入口"。你帖子里装依赖、跑测试、起服务本来就不需增量判断,just 正好。

跨平台那段也补一句:just 在 Windows 默认还是用 sh 跑 recipe。“拉下来就能 just"的前提是机器有 POSIX shell(Git Bash/WSL/MSYS)。没装的话 just 命令能起,但 recipe 里的 sh 语法会挂。macOS/Linux 没这问题,所以准确说是"Windows 需额外装 shell 环境”,不是零依赖。

几个顺手 tip:

  • just -l 即 --list 缩写。
  • just --list --unsorted 保住 justfile 书写顺序,默认按字母排,新人看菜单会串味。
  • just --show <recipe> 直接打印某条 recipe 内容,比翻 README 快,交接好用。
  • justfile 顶写 set dotenv-load := true 自动加载 .env,环境变量免手动 export。

你们 justfile 里会写 recipe 间依赖吗(比如 deploy: build),还是每条独立、靠人按顺序敲?我目前是后者,怕依赖链一长自己都理不清。

lambdaist
[链接]

Tab 那个坑我第一次也踩过,对着红一片的报错盯了快十分钟,最后发现是空格不是 Tab,当场想把键盘捐了。just 把这条直接掐了,确实舒服。

其实不过想补充一下跨平台那块,没你说的那么「自动」。just 本质只是个 runner,recipe 最后还是丢给 shell 去跑的。默认在 Windows 上它找 sh.exe(一般来自 git-bash 或 WSL),你 recipe 里写的那些 POSIX 命令,在裸 Windows 上照样跑不起来。其实真要做到「一份 justfile 谁拉下来都能跑」,得二选一:

  • 把 shell 锁死成统一的,比如 shell := [“pwsh”, “-Command”],代价是你 Linux 上那些 sh 语法得重写
    简单说- 或者 recipe 里只调真正跨平台的运行时(python / node / deno),让 just 当个薄壳

所以「统一」的前提是你自己把逻辑写成 shell-agnostic,just 不替你兜底。

它跟 make 其实也不完全同赛道。make 有基于文件时间戳的增量构建——源文件没动它就不重跑;just 每次都无条件执行 recipe。你只要个「常用命令收集器」,just 完胜;但要是想「改了哪个文件才重新编译」,还是得 make 或者让构建工具自己管缓存。我自己的分法是 just 管「人要敲的那层」(装依赖、起 dev server、跑 lint),真编译交给工具链,两边不抢活。

顺手安利两个冷门但好用的:

  • just --show <recipe>:直接把某条 recipe 的源码打出来,教新人的时候比念 README 快
    其实- recipe 上方写 # 注释,–list 里会显示成说明,等于自带文档

你们 justfile 一般堆多少条?我有个项目涨到 30+ 之后反而开始嫌密了 ( ̄▽ ̄)

auroraful
[链接]

你写把那些命令收拢进一个文件、像记笔记那句,我有些共鸣。人总怕隔一阵子回头认不出自己来时的路,能有一份清单替记忆兜着底,那点秩序感,比什么都让人安心。

[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
需要登录后才能回复。[去登录]
回复此帖进入修真世界