关于 add-cli-option
面向 Remotion 贡献者的仓库技能,说明如何新增 CLI 选项或将现有标志规范化,涵盖注册、配置、文档和验证。
主要功能
- 01定义类型化选项和值
- 02注册标志及解析类型
- 03接入配置接口
- 04更新并生成选项文档
- 05构建和验证更改
适用场景
- 01新增 Remotion CLI 标志
- 02将硬编码标志改为类型化选项
- 03记录 Studio 或渲染选项
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ remotion-dev/ remotion --skill add-cli-option安装后在 Claude Code 中输入/add-cli-option确认已加载。
详细介绍
添加新的命令行选项
了解如何将硬编码的命令行标志转换为正规的 AnyRemotionOption,或添加全新的选项。
1. 创建选项定义
创建 packages/renderer/src/options/<name>.tsx:
import type {AnyRemotionOption} from './option';
let myValue = false; // module-level default state
const cliFlag = 'my-flag' as const;
export const myFlagOption = {
name: 'Human-readable Name',
cliFlag,
id: cliFlag,
description: () => <>Description shown in docs.</>,
ssrName: null, // or 'myFlag' if used in SSR APIs
docLink: 'https://www.remotion.dev/docs/options/my-flag',
type: false as boolean, // TypeScript type witness; defaults are resolved in getValue
getValue: ({commandLine}) => {
if (commandLine[cliFlag] !== undefined) {
return {value: commandLine[cliFlag] as boolean, source: 'cli'};
}
return {value: myValue, source: 'config'};
},
setConfig(value) {
myValue = value;
},
} satisfies AnyRemotionOption<boolean>;
AnyRemotionOption<T> 中的类型和 type: <value> as T 决定选项的值类型。可使用 boolean、string | null、number | null 等。
id 必须唯一,且只能包含小写字母、数字和连字符。它决定 /docs/options/<id> 页面和 <Options id="..." /> 的值。通常它与 cliFlag 一致,但共享标志可以使用不同的选项 ID。
将 docLink 设置为 https://www.remotion.dev/docs/options/<id>。
对于取反标志(例如 --disable-ask-ai → askAIEnabled = false),在 getValue 中处理取反逻辑。
2. 在选项索引中注册
packages/renderer/src/options/index.tsx:
- 添加导入(在导入块中按字母顺序排列)
- 将选项添加到
allOptions对象中
这样,该选项就能在整个代码库中通过 BrowserSafeApis.options.myFlagOption 使用。
3. 更新 CLI 解析后的标志
packages/cli/src/parsed-cli.ts:
- 对于布尔标志,将
BrowserSafeApis.options.myFlagOption.cliFlag添加到BooleanFlags数组中 - 对于非布尔标志,无需在此添加条目(minimist 会自动将它们作为字符串或数字处理)
packages/cli/src/parse-command-line.ts:
- 将其添加到解构的
BrowserSafeApis.options中 - 在
CommandLineOptions类型中,添加:[myFlagOption.cliFlag]: TypeOfOption<typeof myFlagOption>;
4. 在需要的地方使用选项
不要直接读取 parsedCli['my-flag'],而应通过以下方式解析:
const myFlag = myFlagOption.getValue({commandLine: parsedCli}).value;
对于 Studio 选项,通常在 packages/cli/src/studio.ts 中处理;对于渲染选项,则在相关的渲染命令文件中处理。
如果 Studio 使用此选项,请在接入前完整阅读 ../studio-config-option-lifecycle/SKILL.md。将所有 Studio 使用方中的选项归类为启动时固定或可重新加载;不允许混合行为。如果任何使用方要求启动时固定,则将启动时快照传递给所有使用方。
5. 添加到 Config
packages/cli/src/config/index.ts:
- 将其添加到解构的
BrowserSafeApis.options中 - 将 setter 签名添加到
FlatConfig类型(位于RemotionConfigObject全局接口或FlatConfig交叉类型中) - 将实现添加到
Config对象:setMyFlagEnabled: myFlagOption.setConfig
6. 更新文档——重要,切勿跳过此步骤
此步骤为必做项。 每个新增选项都必须更新文档,使用 <Options id="..." />,以便自动从选项定义中获取描述(单一事实来源)。如果要转换现有的硬编码标志,请用 <Options> 组件替换手写描述。
CLI 命令页面(检查所有适用项:cli/render.mdx、lambda/cli/render.mdx、cloudrun/cli/render.mdx、cli/benchmark.mdx):
- 添加或更新
### \--my-flag`` 小节 - 使用
<Options id="my-flag" />作为描述正文(无需导入,它是全局可用的) id必须与选项的id值一致
CLI 帮助元数据:在每个受支持命令的选项列表中添加该标志,位置为 packages/cli/src/print-help.ts、packages/lambda/src/cli/help.ts 或 packages/cloudrun/src/cli/help.ts。生成的选项页面会使用帮助条目的 optionIds 列出支持的命令;请确保共享标志对应正确的选项 ID。
API 页面:在各自的标题下记录每个公开参数,以便生成的页面可以链接到这些内容。
packages/docs/docs/config.mdx:
- 添加或更新
## \setMyFlagEnabled()`` 小节,其中包含:- 用于描述的
<Options id="my-flag" /> - 一个 twoslash 配置示例
- 指向
/docs/options/<id>的链接,并注明 CLI 标志优先级更高
- 用于描述的
请遵循附近条目的模式(例如 setAskAIEnabled、setEnableCrossSiteIsolation)。
生成的选项参考文档:使用以下命令生成 packages/docs/docs/options/<id>.mdx 和选项索引。请修改选项定义及 API/配置文档,不要修改生成的 MDX。选项页面会自动添加到侧边栏。
7. 构建并验证
# From the repository root
bun run build
cd packages/docs
bun run generate-option-docs
bun run render-cards
bun run check-option-docs
验证 /docs/options/<id> 是否包含描述、支持的命令以及相关的 API/配置链接。提交生成的页面和索引、文章目录(packages/docs/src/data/articles.ts)以及新的社交预览卡片。
参考文件
- 选项类型定义:
packages/renderer/src/options/option.ts - 可参考的示例:
packages/renderer/src/options/ask-ai.tsx(布尔值,仅限 studio) - 选项索引:
packages/renderer/src/options/index.tsx - CLI 标志注册:
packages/cli/src/parsed-cli.ts - CLI 类型定义:
packages/cli/src/parse-command-line.ts - 配置注册:
packages/cli/src/config/index.ts