Appearance
说「help」的语言
背景:脚本城邦 40+ 位官员各说各的方言——
--help有时被当标题(new-adr 曾误占 ADR 号)、有时静默空转(fix-adr-dates)、有时直接执行主流程(gen-docs-index 曾真的写盘)。共享解析器parseArgs对未知 flag 只 warn 不退出。过程:
parseArgs内置--help识别(返回 help:true)与 unknown 收集;22 个 parseArgs 消费脚本 + 8 个手写解析脚本统一插守卫(help 退 0、未知 flag 退 1);--help从「看文件头」偷懒提示升级为自吐 JSDoc(真实用法)。
脚本城邦的档案室里,躺着一份奇怪的 ADR。
编号是正经编号,标题却不对劲——adr-027-help.md。
那是很久以前的事:一位年轻的脚本官想查询用法,敲了句 --help。他的解析器不认识这个词,当成了标题——于是档案室多了一篇叫"help"的 ADR。后来人们把它删了,但坑还在:谁也不知道下一个敲 --help 的人,会不会又留下一份奇怪的档案。
我蹲在城邦门口,看着来往的官员,发现一件更麻烦的事:
四十多位官员,四十多种方言。
一、方言普查
我挨家挨户敲了门。
第一位是 fix-adr-dates 官。我敲 --help,他抬头看了我一眼,然后继续干活——把面前的一摞 ADR 挨个改日期。敲完才问我:"你刚说什么?"
"help。"
"哦。"他挠头,"我以为你是来让我改文件的。反正我听着不像文件名,就顺手全改了。"
第二位是 gen-docs-index 官。我敲 --help,他直接把整个索引重写了一遍——磁盘上全是他的墨迹。他擦着手说:"help?那不是个参数,我当没看见。"
第三位是 new-adr 官。我敲 --help,他抓起笔就要往档案册上写:"新 ADR 一篇,标题……help?"
"停下!"我按住他的笔,"那不是标题,那是求救信号!"
"求救?"他茫然,"你的方言里,'help'不是标题吗?"
我忽然明白了问题有多深:不是某个官员听不懂 help,而是整个城邦没有统一的"求救语言"。 有人说 help 是标题,有人说 help 是空气,有人说 help 是开工铃。
二、统一语言
我回到档案室,翻出那份共享的《参数解析宪章》——parse-args.mjs。
宪章说:遇到不认识的 --xxx,警告一声,继续放行。
"放行?"我指着宪章上那行字,"放行到哪去?放到位置参数位?让 fix-adr-dates 把'help'当文件名?"
宪章沉默。
我提笔修改:
--help / -h → 内置识别,标记 help:true(绝不进入参数位)
未知 --flag → 收集到 unknown 清单(仍警告,但调用方可决定)然后,我带着宪章走遍四十家,给每一位官员装上一道统一的喉咙:
听到
--help:停下,念出自己的出身(JSDoc 文件头),退场,退出码 0。 听到不认识的--xxx:报错,退出码 1,绝不把它当成文件名、标题或开工铃。
"为什么退出码是 1?"fix-adr-dates 官问。
"因为报错不是干活,"我说,"报错是承认'我听不懂'。承认听不懂,比假装听懂了乱干,安全得多。"
三、敷衍的喉咙
语言统一了。但第二周,外交官来验收,敲了一声 --help。
一位官员站直,用标准的新喉咙念道:
"用法见文件头 JSDoc。"
然后退场。
外交官等了三秒:"……就这?"
"就这。"官员回答。
外交官转向我,语气很平:"我敲 --help 是想知道怎么用。他告诉我'看文件头'——跟告诉一个迷路的人'看地图'一样。连提示效果都发挥不出来,这个喉咙要它何用?"
我脸上有点挂不住。喉咙是装了,可喉咙里只有一句敷衍。
回去重做。这次不是装喉咙,是给喉咙接上肺——让每位官员在听到 --help 时,翻开自己的出身卷(用 fs.readFileSync 读自己的文件头),把真实的用法、参数、示例,一字一句念出来。
"你刚才念的是什么?"外交官再次敲响那扇门。
官员翻开卷轴,缓缓念道:
用法: node scripts/fix-adr-dates.mjs [adr-NNN-*.md ...]
无参 = 处理全部 ADR;可传文件名限定范围。"这才是 help。"外交官点头,"不是'去看地图',是'地图就在你面前'。"
尾声
现在,四十多位官员都说同一种语言了。
你敲 --help,他们停下来,翻开卷轴,念出真实的用法——不是敷衍的指路,是摊开的地图。你敲一个不认识的 --xxx,他们报错退场,绝不把你的话当标题、当文件名、当开工铃。
语言统一的意义,不是让所有人都说一样的话。
是让**「我听不懂」成为一句可以被说出口、被认真对待的话**——而不是被当成「help」写成档案,被当成空气继续干活,被当成开工铃把整座城重写一遍。
就像联邦的街道:每条路都可以叫不同的名字,但迷路的人喊「help」,必须每家每户都听得懂。
(附录·文档演进 · 第 14 篇,2026-08-06)