命令

了解 Fern CLI 命令。

以 Markdown 格式查看
命令描述
fern init从 OpenAPI 规范或从头开始创建新的 Fern 项目
fern check验证 API 定义和配置
fern upgrade将 Fern CLI 和生成器更新到最新版本
fern login通过 GitHub、Google、Postman 或企业 SSO 登录 Fern CLI
fern logout从 Fern CLI 注销
fern export导出 API 的 OpenAPI 规范
fern api update手动更新 OpenAPI 规范
fern api enrich将覆盖文件中的 x-fern-examples 合并到原生 OpenAPI 示例中

文档命令

命令描述
fern docs dev运行本地文档预览服务器
fern docs diff Beta生成预览和生产文档之间的视觉差异
fern generate --docs构建并发布文档更新
fern docs preview list列出所有预览部署
fern docs preview delete删除预览部署
fern docs md check验证文档文件中的 MDX 语法
fern docs theme exportdocs.yml 导出主题兼容字段到独立目录
fern docs theme upload上传主题到 Fern 注册表
fern docs theme list列出组织的所有主题

SDK 生成命令

命令描述
fern generate构建并发布 SDK 更新
fern write-definition将 OpenAPI 规范转换为 Fern Definition
fern write-overrides创建 OpenAPI 自定义
fern generator upgrade将 SDK 生成器更新到最新版本

详细命令文档

使用 fern init 在当前文件夹中初始化新的 Fern 工作空间。默认情况下,您将看到 IMDb API 示例。

terminal
$fern init [--docs] [--openapi <path/url>]

使用 OpenAPI 初始化时,您的项目结构将如下所示:

fern
fern.config.json
generators.yml# 您使用的生成器
openapi
openapi.json# 您的 OpenAPI 规范

对于 Fern Definition 初始化(不使用 OpenAPI),您将看到以下结构:

fern
fern.config.json
generators.yml# 您使用的生成器
definition
api.yml# API 级别配置
imdb.yml# 端点、类型和错误

openapi

使用 --openapi 从 OpenAPI 规范初始化项目:

$# 从本地文件初始化
$fern init --openapi ./path/to/openapi.yml
$
$# 从 URL 初始化
$fern init --openapi https://link.buildwithfern.com/petstore-openapi

docs

通过添加 --docs,您还将获得一个包含 API Reference 部分的示例文档网站。

$fern init --docs

添加的文件将包含:

docs.yaml
1instances:
2 - url: https://your-organization.docs.buildwithfern.com
3title: Your Organization | Documentation
4navigation:
5 - api: API Reference
6colors:
7accent-primary: '#ffffff'
8background: '#000000'

要发布 API 文档,请运行 fern generate --docs

mintlify

通过添加 --mintlify PATH_TO_MINT_CONFIG,CLI 将根据 mint.json 文件自动将您的 Mintlify 文档文件夹转换为 Fern 文档网站。

$fern init --mintlify PATH_TO_MINT_CONFIG

CLI 将创建一个具有以下结构的 fern/ 文件夹:

fern
fern.config.json# 根级配置
docs.yml# 文档配置
...# 文档中需要的任何其他文件/页面

readme

fern init 命令支持导入 Readme 生成的文档网站。这需要安装本地 chromium 浏览器实例。 您可以通过从源代码安装 fern cli 来确保已安装,请按照这里的说明进行操作。

通过添加 --readme URL_TO_README_DOCS_SITE,CLI 将自动将 Readme 生成的文档网站转换为 Fern 文档网站。

$fern init --readme URL_TO_README_DOCS_SITE

CLI 将创建一个具有以下结构的 fern/ 文件夹:

fern
fern.config.json# 根级配置
docs.yml# 文档配置
...# 文档中需要的任何其他文件/页面

有关入门的更多信息,请查看我们的快速入门指南

使用 fern export 为您的 API 生成 OpenAPI 规范。

当您以 OpenAPI 以外的格式(例如 Fern Definition)定义了 API 并需要将其导出为 OpenAPI 规范以与其他工具或服务集成时,此命令非常有用。

terminal
$fern export [--api <api>] path/to/openapi.yml
$fern export [--api <api>] path/to/openapi.json

api

当您在 fern/apis/ 文件夹中定义了多个 API 时,使用 --api 指定要导出的 API。

terminal
$fern export --api public-api path/to/openapi.yml
$fern export --api public-api path/to/openapi.json

使用 fern generate 运行 Fern 编译器并为您的 API 创建 SDK。

terminal
$fern generate [--group <group>] [--api <api>] [--version <version>] [--preview] [--fernignore <path>] [--local] [--force]

group

使用 --group <group> 指定要运行的生成器组。您可以使用组名或别名。别名在您的 generators.yml 中定义并映射到多个组,允许您通过单个命令并行运行多个组。

$# 运行特定组
$fern generate --group python-sdk
$
$# 运行在"all"别名中定义的所有组
$fern generate --group all
$
$# 运行在"frontend"别名中定义的所有组
$fern generate --group frontend
$
$# 本地运行特定组(自托管)
$fern generate --group python-sdk --local

您还可以在 generators.yml 中将别名设置为 default-group,这样运行不带任何参数的 fern generate 将运行该别名中的所有组。

--group 标志可以与其他标志组合使用,如用于自托管 SDK 生成--local、用于本地测试的 --preview 或用于指定 SDK 版本的 --version

preview

使用 --preview 在发布前本地测试 SDK 更改。这在开发期间特别有用:

  • 将 SDK 生成到本地 .preview/ 文件夹
  • 允许在 Fern 定义上快速迭代
  • 不会将更改发布到包管理器或 GitHub
$# 预览所有 SDK
$fern generate --preview
$
$# 预览特定 SDK 组
$fern generate --group python-sdk --preview

api

使用 --api <api> 为 SDK 生成指定 API。当项目包含多个 API 定义时这很有用。API 名称应与 fern/apis/ 文件夹中的目录名称匹配。

$fern generate --api public-api

version

使用 --version 指定 SDK 版本号,通常遵循语义版本控制(semver)格式(MAJOR.MINOR.PATCH)。这在发布 SDK 版本的 CI/CD 流水线中特别有用。

$# 使用版本 2.11.0 生成所有 SDK
$fern generate --version 2.11.0
$
$# 为支付 API 的 Python SDK 生成版本 1.2.3
$fern generate --api payments-api --group python-sdk --version 1.2.3

fernignore

使用 --fernignore 为 SDK 生成指定自定义 .fernignore 文件路径。这允许您临时测试不同的忽略配置,而无需修改存储库中已提交的 .fernignore

Fern 将使用指定的文件而不是主分支上的文件,并将新的 .fernignore 作为生成过程的一部分提交到您的存储库。

$fern generate --fernignore ./custom-fernignore

local

使用 --local 在您自己的机器上运行 SDK 生成,而不是使用 Fern 的云基础设施。这对于有严格安全或合规要求的组织很有用。请参阅自托管 SDK 获取设置说明。

$# 本地生成所有 SDK
$fern generate --local
$
$# 本地生成特定 SDK 组
$fern generate --group python-sdk --local

您的机器上必须运行 Docker 守护进程,因为 SDK 生成在 Docker 容器内运行。

默认情况下,CLI 从 Docker Hub 拉取生成器镜像。要从自定义容器注册表拉取,请在您的 generators.yml 中使用 image 字段 而不是 name。请参阅自定义容器注册表了解详细信息。

force

使用 --force 跳过生成过程中的确认提示。这在会阻塞流水线的交互式提示的 CI/CD 环境中很有用。

$# 不带确认提示生成
$fern generate --group python-sdk --force

--broken-links--strict-broken-links 标志已弃用。请在 docs.yml 中使用 broken-links 验证规则

您还可以使用 Fern Dashboard 验证实时发布网站上的内部和外部链接。

使用 fern check 验证您的 API 定义和 Fern 配置,包括 fern.config.jsongenerators.ymldocs.yml。它检查损坏的链接、无效的 API 示例、配置错误等。当所有检查通过时,该命令不产生输出。

terminal
$fern check [--api <api>] [--warnings]

您可以在 docs.yml 文件中使用 check.rules 属性配置 fern check 运行的验证规则的严重性。

docs.yml
1check:
2 rules:
3 broken-links: error
4 example-validation: warn
5 missing-redirects: error

api

使用 --api <api> 指定要检查的 API。

$fern check --api public-api

warnings

使用 --warnings 除了记录错误外还记录警告。

$fern check --warnings

在 GitHub Action 中使用

.github/workflows/fern-check.yml
1name: Fern Validation Check
2
3on:
4 pull_request:
5 push:
6 branches:
7 - main
8
9jobs:
10 validate-fern-api:
11 name: Validate using Fern's linter
12 runs-on: ubuntu-latest
13 steps:
14 - name: Checkout repository
15 uses: actions/checkout@v4
16
17 - name: Install Fern CLI
18 run: npm install -g fern-api
19
20 - name: Validate API with Fern
21 run: fern check

使用 fern generate --docs 为您的 API 创建文档网站。

terminal
$fern generate --docs [instance <instance-url>] [--preview] [--id <name>] [--force]

instance

使用 --instance 指定要为 docs.yml 中的哪个实例 URL 生成文档。

$fern generate --docs --instance your-organization.docs.buildwithfern.com

preview

使用 --preview 在将更改发布到生产网站之前预览文档更新。

$fern generate --docs --preview

id

使用 --id--preview 一起创建稳定的命名预览链接。预览 URL 遵循格式 {org}-preview-{id}.docs.buildwithfern.com,因此使用相同的 --id 重新运行会就地更新现有预览,而不是创建新预览。

$fern generate --docs --preview --id my-feature
$# -> https://your-org-preview-my-feature.docs.buildwithfern.com

这在您希望每个拉取请求有一个预览 URL 的 CI 工作流程中很有用。请参阅预览更改了解详细信息。

force

当重用已存在的 --id 时,Fern 会提示您确认覆盖。使用 --force 跳过确认。这在 GitHub Actions 中会自动检测到,但在其他 CI 环境(如 Azure Pipelines)中需要。

$fern generate --docs --preview --id my-feature --force

使用 fern docs preview list 列出您组织的所有预览部署。

terminal
$fern docs preview list [--limit <number>] [--page <number>]

limit

使用 --limit 指定每页显示的预览部署数量。

$fern docs preview list --limit 20

page

使用 --page 指定要显示结果的页面。

$fern docs preview list --page 2

使用 fern docs preview delete 删除使用 fern generate --docs --preview 生成的预览部署。<url> 参数是要删除的完整预览 URL。

terminal
$fern docs preview delete <url>

使用 fern docs dev 运行本地开发服务器来预览您的文档。

terminal
$fern docs dev [--port <port-number>]
Windows: 启用长路径支持

在 Windows 上,fern docs dev 需要启用长路径支持

要启用长路径支持,请在提升的 PowerShell 提示符中运行以下命令,然后重启您的终端:

1New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name 'LongPathsEnabled' -Value 1 -PropertyType DWORD -Force

如果您无法启用长路径支持,请使用 Windows Subsystem for Linux (WSL) 在 Linux 环境中运行 fern docs dev

port

使用 --port <port-number> 指定文档预览运行的端口。

$fern docs dev --port 57908

使用 fern docs md check 验证导航配置中引用的所有文档页面的 MDX 语法,包括 docs.yml、版本配置文件和产品特定的 YAML 文件。

terminal
$fern docs md check

该命令解析每个 MDX 文件并报告语法错误,包含文件路径和行:列号。该命令考虑 frontmatter 偏移量,因此报告的行号与文件中的实际行对应。

fern/pages/quickstart.mdx:12:5
Unexpected closing tag, expected corresponding closing tag for `<CodeBlock>`
fern/pages/guide.mdx:45:1
Expected a closing tag for `<Note>` before the end of `paragraph`

当所有文件都有效时,您将看到成功消息:

✓ All 42 MDX files are valid
Beta

使用 fern docs diff 在预览部署和生产文档之间生成视觉差异。此命令旨在用于 GitHub Actions。它捕获两个版本的截图并创建并排比较图像。

terminal
$fern docs diff <preview-url> <files..> [--output <output-dir>]

传递来自 fern generate --docs --preview 的预览 URL 和一个或多个 MDX 文件路径。差异图像默认保存到 .fern/diff

$fern docs diff acme-preview-abc123.docs.buildwithfern.com fern/pages/intro.mdx fern/pages/quickstart.mdx

output

使用 --output 为差异图像指定自定义目录。

$fern docs diff acme-preview-abc123.docs.buildwithfern.com fern/pages/intro.mdx --output ./my-diffs

使用 fern upgradefern.config.json 中的编译器版本升级到最新版本。它还将 generators.yml 中的生成器升级到其最低兼容版本。

terminal
$fern upgrade

使用 fern login 通过 GitHub 或 Google 登录 Fern CLI。登录允许您加入 GitHub 组织、获得权限并为项目做出贡献。

terminal
$fern login
$fern login --device-code
$fern login --email <email>

默认情况下,fern login 打开浏览器进行 GitHub、Google 或 Postman 身份验证。有两种替代流程可用:

device-code

在无法自动打开浏览器的环境中(例如 SSH 会话或容器),使用 --device-code 通过设备代码授权登录。

$fern login --device-code

email

使用 --email 通过企业 SSO 登录。传递与您组织的 SSO 提供商关联的电子邮件地址。

$fern login --email user@example.com

要启用 CI/CD,请使用 fern token

使用 fern logout 从 Fern CLI 注销。这将清除您的身份验证凭据并撤销对您的 GitHub 组织和权限的访问。

terminal
$fern logout

注销后,您需要再次运行 fern login 来访问受保护的功能。

使用 fern token 生成一个用于在 CI/CD 环境中对 Fern CLI 进行身份验证的令牌。该令牌特定于您在 fern.config.json 中定义的组织,并且不会过期。

terminal
$fern token

请参阅发布您的文档,了解在自动化发布工作流程中使用此令牌的说明。

使用 fern write-definition 将您的 OpenAPI 规范转换为 Fern Definition。您必须有一个包含 .json.yaml 格式的 OpenAPI 规范文件的 fern/openapi/ 文件夹。

terminal
$fern write-definition [--api <api>]

运行此命令时,会在 fern/ 内创建一个名为 .definition/ 的新文件夹。

fern
fern.config.json
generators.yml
openapi
openapi.json
.definition# 您的 Fern Definition
api.yml
__package__.yml

如果您没有看到 .definition/ 文件夹,请使用适当的命令或配置来查看隐藏文件夹(在 bashzsh 中使用 ls -a)。

如果您的 fern/ 文件夹同时包含 openapi/definition/ 文件夹,Fern 默认读取您的 OpenAPI 规范。要使用您的 Fern Definition 作为输入,您必须:

  • .definition/ 文件夹重命名为 definition/
  • 删除或重命名 openapi/ 文件夹。例如,您可以将其重命名为 .openapi/

api

如果您在 fern/apis/ 文件夹中定义了多个 API,请使用 --api 指定要为其编写定义的 API。

$fern write-definition --api public-api

使用 fern write-overrides 生成基本的 OpenAPI 覆盖文件。覆盖文件允许对 API 规范进行可逆修改,包括为 Fern Docs 中的代码片段添加请求和响应示例。

terminal
$fern write-overrides [--api <api>] [--exclude-models]

运行此命令时,会在 fern/openapi/ 内创建一个名为 openapi-overrides.yml 的新文件。

fern
fern.config.json
generators.yml
openapi
openapi-overrides.yaml# 您的覆盖文件
openapi.json

api

如果定义了多个 API,请使用 --api 指定要对其运行命令的 API。

$fern write-overrides --api public-api

exclude-models

使用 --exclude-models 在生成初始覆盖时存根模型(除了端点)。

$fern write-overrides --exclude-models

使用 fern generator upgradegenerators.yml 中的所有生成器更新到其最新版本。

这与更新 Fern CLI 版本的 fern upgrade 不同。使用这两个命令来保持整个 Fern 工具链的最新状态。

terminal
$fern generator upgrade [--list] [--generator <generator-name>] [--group <group>] [--include-major]

此命令将:

  • 检查 generators.yml 中指定的所有生成器的更新
  • 将生成器版本更新到其最新兼容版本
  • 保持与当前 Fern 编译器版本的兼容性

当有可用更新时,您可能会看到:

┌───────────────────────────────────────────────────────────────────────────────────┐
│ │
│ Upgrades available │
│ │
│ │
│ C# SDK (API: openapi, Group: csharp-sdk) 1.9.11 → 1.9.15 │
│ Java SDK (API: openapi, Group: java-sdk) 2.2.0 → 2.11.3 │
│ Python SDK (API: openapi, Group: python-sdk) 4.3.10 → 4.3.11 │
│ │
│ Run fern generator upgrade to upgrade your generators. │
│ Run fern generator upgrade --list to see the full list of generator upgrades │
│ available. │
│ │
└───────────────────────────────────────────────────────────────────────────────────┘

list

使用 --list 查看可用生成器升级的完整列表。

$fern generator upgrade --list

generator

使用 --generator 指定要升级的特定生成器类型。

$fern generator upgrade --generator fernapi/fern-typescript-sdk
$fern generator upgrade --generator fernapi/fern-python-sdk

group

使用 --group 升级 generators.yml 中特定组内的生成器。如果未指定,将升级指定类型的所有生成器。

$fern generator upgrade --group public

include-major

$fern generator upgrade --include-major

使用 --include-major 包括主要版本升级。默认跳过主要版本以防止破坏性更改。

generators.yml 中指定的 origin 拉取最新的 OpenAPI 规范并更新本地规范。或者,您可以通过设置 GitHub Action 来自动化此过程

terminal
$fern api update [--api <api>]

api

如果 generators.yml 中有多个定义了 origin 的规范,请使用 --api 指定要更新的 API。如果您不指定 API,所有有 origin 的 OpenAPI 规范都将被更新。

terminal
$fern api update --api public-api

使用 fern api enrichAI 生成的示例或手动创作的 x-fern-examples 转换为任何兼容 OpenAPI 的工具都可以使用的可移植 OpenAPI 示例。

terminal
$fern api enrich <openapi> -f <overrides-file> -o <output-file>

该命令将覆盖文件中的示例合并到原生 OpenAPI example 字段中,并从输出中剥离 x-fern-examples 键。当端点有多个示例时,每个示例都作为命名条目存储在复数 examples 字段下。

该命令需要两个标志:

  • -f(或 --file)— 包含 x-fern-examples 的覆盖文件(例如,ai_examples_override.yml)。
  • -o(或 --output)— 丰富输出文件的路径。支持 .yml.json 扩展名。
$# 输出为 YAML
$fern api enrich openapi.yml -f overrides.yml -o enriched-openapi.yml
$
$# 输出为 JSON
$fern api enrich openapi.yml -f overrides.yml -o enriched-openapi.json

每个 x-fern-examples 字段都映射到其标准 OpenAPI 位置:

  • path-parametersparameters[].example(其中 in: path
  • query-parametersparameters[].example(其中 in: query
  • headersparameters[].example(其中 in: header
  • request.bodyrequestBody.content.*.example
  • response.bodyresponses.<status>.content.*.example

使用 fern docs theme exportdocs.yml 中的主题兼容字段提取到独立目录中。导出的 theme.yml 及其资源然后可以通过 fern docs theme upload 上传。

terminal
$fern docs theme export [--output <directory>]

默认情况下,文件写入 ./fern/theme/

output

使用 --output 为导出的主题指定自定义目录。

$fern docs theme export --output ./my-theme

使用 fern docs theme upload主题上传到 Fern 的注册表。该命令从 ./fern/theme/ 读取 theme.yml 并连同任何引用的文件资源一起上传。

terminal
$fern docs theme upload [--name <name>] [--org <org>]

name

使用 --name 设置主题名称。默认为 default

$fern docs theme upload --name my-theme

org

使用 --org 覆盖来自 fern.config.json 的组织 ID。

$fern docs theme upload --org my-org

使用 fern docs theme list 列出为您的组织上传的所有主题

terminal
$fern docs theme list [--json] [--org <org>]

默认情况下,每行输出一个主题名称。

json

使用 --json 将完整列表输出为 JSON 数组,包括 updatedAt 时间戳。

$fern docs theme list --json

org

使用 --org 覆盖来自 fern.config.json 的组织 ID。

$fern docs theme list --org my-org