你脑子里有完整地图,所以处处顺。陌生用户第一眼只看到困惑和死链。
骂了吗 · WouldItShip · 开源 CLI
装不起来,就是最狠的差评。
vibecoding 让做产品的门槛塌了,但「做出来」和「有人能用」之间的鸿沟没变小——只是被自己人的乐观掩盖了。npx woulditship 在你的 repo 目录里,像最挑剔的陌生用户那样真的去装、去跑你的产品。如果它连装都装不起来——那本身就是最不可辩驳的骂。
npx woulditship
→ 识别栈:Node (package.json)
→ 真实安装:npm install …
✗ postinstall 退出码 1:找不到 ./scripts/setup.sh
✗ 安装失败 · 用时 8.2s
「README 里写「一行装好」,结果 postinstall 直接挂了。第一次见你的人到这就关掉了——不是嫌弃,是根本进不来。先让它装得起来,再谈别的。」
为什么需要被骂
你测着顺,是因为你早就知道答案
你知道每个按钮该点哪、哪些是占位、哪步要手动跳过。陌生用户没有这套内部知识。
README 的安装步骤跑不通,没人会去 issue 里问。他们默默离开,你永远不知道。
「在我机器上能跑」掩盖了一切。骂了吗在一台干净环境里,当陌生人替你跑一遍。
它怎么骂你 · 3 步
认栈 → 真装真跑 → 出毒评
不是静态扫 README 挑刺。是真的在你的 repo 里走一遍陌生用户的第一次。
-
01
认栈
detectStack读 package.json / requirements.txt / go.mod / Cargo.toml,自动判定技术栈。认不出就明确告诉你「不支持」,绝不硬猜。
-
02
真装真跑
runInstall在目标 repo 里真的执行 install(含 postinstall),像陌生用户一样体验第一次上手。硬超时默认 300s,
--no-run可只静态读。 -
03
出毒评
roast把安装/运行的真实结果喂给 LLM,生成一针见血的毒评。配
DEEPSEEK_API_KEY才调模型;没配走离线 mock,照样骂,朴素些。
用法
一个 npx,零安装
Node ≥ 22。在你想被骂的 repo 目录里直接跑——执行前会警告并等你确认。
npx woulditship # 在当前 repo 跑;执行前会警告并等你确认
npx woulditship ./some-repo # 指定目录
npx woulditship --no-run # 静态模式:只读 README/结构,绝不执行任何脚本
npx woulditship --yes # 跳过确认(CI / 熟练用户)
npx woulditship --timeout 120 # 安装硬超时秒数(默认 300)
想要更毒的评:配 DEEPSEEK_API_KEY(默认模型 deepseek-chat,可用 DEEPSEEK_MODEL 改)。没配也能用,走离线 mock。源码与 issue 见 GitHub。
支持的栈 · v1
四种主流栈,认不出不硬猜
按 repo 里的清单文件判定。不认识的栈会明确说「不支持」,而不是瞎跑。
package.jsonrequirements.txt · pyproject.tomlgo.modCargo.toml认不出的栈 → 明确「不支持」,不硬猜。更多栈在路上。
⚠ 安全 它会真的运行别人的代码
默认会在目标 repo 执行 install / run 脚本(含 postinstall),等于运行里面的代码。这是个骂人工具,你大概率会手痒去骂别人的 repo——而 postinstall 可以是任意代码。
拿别人的 repo 前想清楚。只想看看而不执行任何脚本,用 --no-run 走静态模式:只读 README 和目录结构。
路线
从「装得起来吗」到「真用着行吗」
v1 先解决最硬的那道门槛:装 + 失败即 roast。装不起来是最不可辩驳的差评,先把这块照清楚。下一站是真的把服务跑起来、点页面、走一遍核心流程,给出体验式的吐槽——不只是「能装」,而是「值不值得用」。
- NOW v1 · 装 + 失败即 roast
- NEXT v2 · run + 真实体验式吐槽
- 开源 MIT · 神仙鱼 / HRDAI
骂了吗 (WouldItShip) 开源 MIT。做产品的门槛塌了,但「能用」的门槛没塌——它替你站在陌生用户那一侧,把你看不见的劝退点一句句骂出来。