跳转到内容

CLI 工具

两个小巧的 npm 命令行工具,用来快速新建内容文件:

shane-new-post

AstroPaper 风格的 Astro 博客用——任何 frontmatter 结构接近 title / pubDatetime / tags / featured / draft 这套 AstroPaper 惯例的博客集合都适用。支持交互式问答,也支持一行命令直接生成,自动创建配图文件夹、根据标题自动建议文件名,支持标签 / 精选 / 草稿 / mdx 等字段。

shane-new-doc

Astro Starlight 文档站(比如这个网站)用——依赖里带 @astrojs/starlight 的项目都适用。同样支持交互式和命令式两种用法,自带目录/文件名合法性检查,重名会自动加序号而不是覆盖。

两个工具不能混着用:shane-new-post 写的是单层结构的文章目录(src/content/posts/),shane-new-doc 写进 Starlight 那种带层级的文档目录(src/content/docs/<目录>/),还会处理侧边栏排序。选哪个工具,关键看项目框架,不是看你要写的是什么内容。

每个工具装一次就同时支持中英文,不用再纠结装普通版还是 -chinese 版。所有提示、注释、报错信息都来自包里自带的一对 en.json / zh-cn.json,每次都会一起装进去。

语言只在安装时问一次:如果终端是交互式的、又没有提前传参数,安装器会问「Select CLI language / 选择界面语言」,选择结果会保存到项目根目录的 .shane-new-post.json / .shane-new-doc.json 里,之后每次运行都会自动沿用,不会再问。也可以提前用 --lang=en / --lang=zh-cn 跳过这个提问,或者以后在某次命令上临时覆盖而不改动已保存的设置。完整的判定顺序见安装与快速开始

两个工具都适用 下面几条规则在 new-postnew-doc 的命令模式里是通用的,建议先看一遍,再去看各自的详细用法:

  • key:value 参数的顺序可以随意打乱,可以用 / 分隔,也可以用空格分隔(配合结尾的 \ 换行)。只有排在 key:value 参数之前的位置参数——new-post 的文件名、new-doc 的目录和文件名——顺序是固定的,不能打乱。
  • 布尔值不区分大小写,除了完整单词 true / false,也支持简写 T / F。具体规则是:只有 ttrue(不论大小写,比如 TTrueTRUE)会被识别为“是”;其它任何值——ffalse、空值,或者干脆不写这个参数——都会被当成“否”。
  • 部分参数名有别名(比如 description 可以简写成 desc),完整列表见各自工具的参数表。
  • 认不出的参数名只会提示警告,不会报错——某个可选字段名字打错了,也不会影响文件正常生成。

两个包都自带一个 postinstall 脚本,依赖装完的那一刻会自动触发(靠的是 npm/pnpm/yarn 自己的生命周期脚本机制,这是 package.json 的标准行为,不是这个项目自己发明的)。简单说:它会先检查项目是否符合条件,然后往 scripts/ 目录放一个可以直接运行的脚本、保存一个小配置文件,再往 package.json 里塞一条 pnpm new-doc / pnpm new-post 命令——全程不需要手动复制粘贴。它做的每一步检测(框架识别、冲突扫描、包管理器识别,以及某一步被跳过时该怎么办)都在安装原理详解里逐条写清楚了——就算一切顺利也建议看一遍,里面也讲了出问题时怎么手动补上。