@azure-tools/typespec-client-generator-cli

中文文档
0.33.1发布于 2026/05/02MITES Module近 30 天下载 5.2万

从 TypeSpec 生成 Azure SDK 的工具

中文使用文档
文档目录17 节
  1. 先决条件
  2. 安装
  3. 使用量
  4. 图标
  5. 输入
  6. 更新
  7. 同步
  8. 生成
  9. 转换
  10. 排序拓扑器
  11. 生成配置文件
  12. 生成锁定文件
  13. 安装依赖性
  14. 重要概念
  15. 每个项目设置
  16. 高级设想
  17. 批量库生成

tsp 客户端

tsp-client 是一个简单的命令行工具来方便从 TypeSpec 生成客户端库.

先决条件

安装

npm install -g @azure-tools/typespec-client-generator-cli

注: " Repo " 所有人应当遵守《公约》的步骤 tsp - 客户端重传设置 医生.

使用量

tsp-client < command > [options]

图标

使用其中一个支持的命令从TypeSpec项目开始生成客户端.

此工具将默认使用您当前的工作目录生成客户端 用于查找相关的配置文件。 要指定不同的输出目录, 请使用 页:1 -o 或者说 --output-dir 选项.

要查看支持的命令, 请运行 :

tsp-client --help

要查看支持的特定命令的参数和选项, 运行:

tsp-client < command > --help

使用 init 命令 :

tsp-client init --help

输入

使用 tspconfig.yaml 初始化客户端库目录 。 当运行此命令时, 在本地路径或远程 tspconfig 的 URL 中通过 。 来啊 -c 或者说 --tsp-config 旗帜。 如果远程, tspconfig 。 Yaml必须包含路径中的具体承诺. (见下文实例)

这个 init 命令按照整个Azure SDK语言寄存器所用的标准模式生成目录结构,创建 tsp-location.yaml (中文(简体) ) 文件用于控制生成,并履行客户端库的初始生成。 如果您想要跳过客户端库生成, 请通过 --skip-sync-and-generate 旗帜.

重要: 此命令应从寄存器的根来运行 。 示例寄存器根 : azure-sdk-for-python/

示例

tsp-client init -c https://github.com/Azure/azure-rest-api-specs/blob/dee71463cbde1d416c47cf544e34f7966a94ddcb/specification/contosowidgetmanager/Contoso.WidgetManager/tspconfig.yaml

更新

这个 update 命令将查找一个 tsp-location.yaml (中文(简体) ) 当前目录中的文件可以同步 TypeSpec 项目并生成客户端库。 更新流称为 sync 财务报告和审定财务报表 generate 命令,所以如果需要将这些步骤分开,请使用 sync 财务报告和审定财务报表 generate 相反,命令是分开的.

示例

tsp-client update

批量图书馆的生成参见 批量库生成 说明.

同步

用 tsp-location.yaml 中指定的参数同步 TypeSpec 项目.

默认情况下 sync 命令将查找 tsp- 位置。 获取项目细节并同步到一个名为“ 临时目录” 的临时目录 TempTypeSpecFiles。作为替代,您可以在 --local-spec-repo 标记与您本地 TypeSpec 项目的路径, 将这些文件拖入您的临时目录 .

示例

tsp-client sync

生成

从 TypeSpec 项目创建客户端库. 这个 generate 命令应在 sync 命令. generate 取决于存在 TempTypeSpecFiles 创建目录 sync 命令和命令时 emitter-package.json 文件在以下路径中检查到您的仓库 : <repo root>/eng/emitter-package.json编辑 emitter-package.json 文件用于安装项目依赖性并获得适当的发射包.

示例

tsp-client generate

转换

将已有的 swagger 规格转换为 TypeSpec 项目 。 此命令只应运行一次才能开始在 TypeSpec 项目上工作. TypeSpec项目需要在转换后手动优化并进行全面审查. 当使用此命令时, 需要通过 : --swagger-readme 旗帜。 默认情况下,被转换的TypeSpec项目将用标准模式和模板来利用TypeSpec内置库(高推荐),这将造成生成的TypeSpec和原生的 swagger之间的差异. 如果你真的不想要这个 想要的差异,添加 --fully-compatible 旗来生成一个完全兼容 swagger 的 Typec 项目.

示例

tsp-client convert -o ./Contoso.WidgetManager --swagger-readme < path-to > /readme.md

排序拓扑器

用 TypeSpec 生成的 swagger 排序现有的 swagger 规格为相同的内容顺序 。 这将允许您比较并识别当前所生成的 swagger 和 TypeSpec 之间的区别 。 在创建已转换的 TypeSpec PR 之前, 您应该运行此命令 .

生成配置文件

此命令生成 tsp- 客户端使用的默认配置文件 。 运行此命令以生成 emitter-package.json 财务报告和审定财务报表 emitter-package-lock.json 下划线 纳克/ 您当前仓库的目录 .

要求: 使用 --package-json 标记以指定软件包的路径。json文件用于生成客户端库.

示例

tsp-client generate-config-files --package-json < path-to-emitter-repo-clone > /package.json

任何额外的 npm 旗可以使用 --npm-args 选项。 这允许您通过任何 npm 旗帜, 如 --registry, (中文(简体) ), --legacy-peer-deps, (中文(简体) ), --force空格分隔字符串中的等:

tsp-client generate-config-files --package-json < path-to-emitter-repo-clone > /package.json --npm-args="--registry=https://my-registry --legacy-peer-deps"

使用 azure-sdk-for-js 编辑 @azure-tools/typespec-ts 发射器 :

这个 --package-json 旗帜应该是重新复制@azure-tools/typespec-ts包的相对或绝对路径.

azure-sdk-for-js > tsp-client generate-config-files --package-json < path-to-emitter-repo-clone > /package.json

要明确指定您想要绑定的依赖性, 请在软件包中添加一个新字段。 json 文件名为 "azure-sdk/emitter-package-json-pinning" 带有您想要转发到排放包的依赖性列表 。 这些依赖关系必须在您的软件包中指定 。 json的devDependency,以便工具指定正确的版本.

注:如果 azure-sdk/emitter-package-json-pinning 字段从 package.json 文件中缺失。该工具将默认对下面列出的软件包进行针入 peerDependencies。 。 。 .

示例包.json 使用 "azure-sdk/emitter-package-json-pinning"数字 :

{
  "name": "@azure-tools/typespec-foo",
  "version": "0.4.0-alpha.20250110.1",
  ...
  "dependencies": {
    "@azure-tools/generator-foo": "0.3.0",
    "@typespec/http-client-foo": "1.2.0"
  },
  "devDependencies": {
    "@typespec/compiler": "0.64.0",
    "rimraf": "^6.0",
  },
  "azure-sdk/emitter-package-json-pinning": [
    "@typespec/compiler"
  ]
}

示例 emitter-package.json 由软件包生成. json 上所示:

{
  "main": "dist/src/index.js",
  "dependencies": {
    "@azure-tools/typespec-foo": "0.4.0-alpha.20250110.1"
  },
  "devDependencies": {
    "@typespec/compiler": "0.64.0"
  }
}

如果您需要覆盖您的 emiters- package.json 的依赖性, 您可以创建 json 文件, 以明确列出您想要覆盖的软件包和相应的版本 。 这将增加一个 overrides 在您发射包中的区域。 json 将用于 npm install 或者说 npm ci。 。 。 . 参见 npm 覆盖 doc .

有包覆盖的示例 json 文件 :

{
  "@azure-tools/typespec-foo": "https://<dev-feed-url>/typespec-foo-0.4.0-alpha.20250110.1.tgz",
  "@azure-tools/generator-foo": "https://<dev-feed-url>/generator-foo-1.3.0-alpha.20250110.1.tgz"
}

指定覆盖的示例命令 :

tsp-client generate-config-files --overrides my_overrides.json --package-json < path-to-emitter-repo-clone > /package.json

示例 emitter-package.json 使用覆盖生成 :

{
  "main": "dist/src/index.js",
  "dependencies": {
    "@azure-tools/typespec-foo": "https://<dev-feed-url>/typespec-foo-0.4.0-alpha.20250110.1.tgz"
  },
  "devDependencies": {
    "@typespec/compiler": "~0.64.0"
  },
  "overrides": {
    "@azure-tools/generator-foo": "https://<dev-feed-url>/generator-foo-1.3.0-alpha.20250110.1.tgz"
  }
}

生成锁定文件

根据已有的 eng/ 目录在 eng/ 目录下生成一个发报- package-lock.json <repo-root>/eng/emitter-package.json。 。 。 .

示例

tsp-client generate-lock-file

任何额外的 npm 旗帜都可以传送到下面 npm install 使用 --npm-args 选项。 这允许您通过任何 npm 旗帜, 如 --registry, (中文(简体) ), --legacy-peer-deps, (中文(简体) ), --force空格分隔字符串中的等:

tsp-client generate-lock-file --npm-args="--registry=https://my-registry --legacy-peer-deps"

安装依赖性

默认情况下在寄存器的根部安装嵌入于emitter-package.json和emitter-package-lock.json(如果存在的话)的依赖性. 该命令支持一个位置路径参数,如果需要将依赖性安装到另一个目录中.

IMPORANT:节点 模块/目录需要安装在一条路径上,基本npm命令可以使用. 通常与要编译的目标 Typec 项目在同一目录路径内.

tsp-client install-dependencies [optional install path]

重要概念

每个项目设置

每个工程都需要有一个名为tsp-location的配置文件. 将告诉工具在哪里找到 TypeSpec 项目 .

tsp-location.yaml (中文(简体) )

此文件通过 tsp-client init 命令或您可以在项目目录下手动创建它,以运行此工具所支持的其他命令.

注: 此文件应存在于每个服务的项目目录下.

文件有以下属性:

财产说明必需
目录用于服务的主.tsp所居住的顶级目录. 这应该是相对于 spec repo 根, 如 specification/cognitiveservices/OpenAI.Inference真实
额外 目录有时一个类型文件会使用可能不在主目录下的相对导入. 在这种情况下,一个 directory 将不足以删除所有必要的文件。 要支持此选项, 您可以指定额外的目录为要同步的列表, 以便同步所有需要的文件 .假: 默认 = 无效
承诺您想要生成的类型文件版本的承诺 sha 。 这使得我们能够在一代人身上拥有一能,直到我们选择指向后来的版本.真实
还原重播的这个谱系存在。 这应该是 Azure/azure-rest-api-specs 或者说 Azure/azure-rest-api-specs-pr。请注意, pr 将在本地工作, 但不会在 CI 中工作, 除非我们添加另一个更改来处理基于符号的认证 .真实
输入点文件用于编译 TypeSpec 项目的特定入口文件 。 注:此选项只应使用非标准条目文件名。 不使用此选项, 并带有标准切入点 : client.tsp 或者说 main.tsp。 。 。 .虚假

示例

directory: specification/contosowidgetmanager/Contoso.WidgetManager
commit: 431eb865a581da2cd7b9e953ae52cb146f31c2a6
repo: Azure/azure-rest-api-specs
additionalDirectories:
  - specification/contosowidgetmanager/Contoso.WidgetManager.Shared/

高级设想

批量库生成

批量客户端库生成仅支持 tsp-client update 命令。 为了使批量生成能够遵循这些步骤:

  1. 增加tsp-位置. 将生成所有批次库的父目录中的 yaml 文件 。 示例
- sdk/
  - foo/
    - tsp-location.yaml
    - bar/
    - zas/
  1. 顶级tsp-位置. 雅姆尔应该只有 batch 属性配置。 分批地产预计将是直接包含正则 tsp-位置的子目录. 为客户端库生成配备了适当配置的yaml文件. 其他 tsp- location.yaml 属性, 如 directory, (中文(简体) ), commit, (中文(简体) ), repo, (中文(简体) ), additionalDirectories 目前不支持 batch 配置 。 示例
batch:
  - ./bar
  - ./zas
  1. 确保在 batch 列表有 tsp- 位置。 为它们配置了 yaml 文件 。 若分行所出无有取取取取取取取出. Tsp- 客户端将返回一个错误 。 以设tsp-地. 子目录中的 yaml 文件, 您可以创建 tsp- 位置 。 手动或使用 Yaml 文件 tsp-client init 附有适当 emitter-output-dir 配置来创建它 .

需要的文件结构示例 :

- sdk/
  - foo/
    - tsp-location.yaml
    - bar/
        - tsp-location.yaml
    - zas/
        - tsp-location.yaml

子目录中的正则 tsp-location.yaml 示例 :

directory: specification/contosowidgetmanager/Contoso.WidgetManager
commit: abc123
repo: Azure/azure-rest-api-specs
additionalDirectories:
  - specification/contosowidgetmanager/Contoso.WidgetManager.Shared/
  1. 运行 tsp-client update 从父目录。 上面的例子就是 foo/ 目录.

注:如果 update 调用子目录失败 .

  1. 都结束了! tsp-客户端会调用每个子目录上的更新命令,向命令转发命令行参数.

注: local-spec-repo 旗在批量库生成时会有特殊的行为. tsp客户端将获得传递到旗帜的本地光谱回波路径的回波根路径,然后从 tsp 位置附加目录值. 相应的子目录中的 yaml 文件 .

版本与发布记录

@azure-tools/typespec-client-generator-cli 共发布 60 个版本,首次发布于 2023/10/21;过去 12 个月发布了 5 个版本。

版本发布日期距今
0.33.1latest2026/05/026 个月前
0.33.02026/04/306 个月前
0.32.12026/04/216 个月前
0.32.02026/04/047 个月前
0.31.02025/11/2611 个月前
0.30.02025/11/061 年前

关于 @azure-tools/typespec-client-generator-cli 的常见问题

@azure-tools/typespec-client-generator-cli 是什么?

从 TypeSpec 生成 Azure SDK 的工具

如何安装 @azure-tools/typespec-client-generator-cli?

在项目目录运行 npm install @azure-tools/typespec-client-generator-cli,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:@typespec/compiler(1.0.0-rc.1 || >=1.0.0 <2.0.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。它还提供命令行工具 tsp-client,可以用 npx tsp-client 直接运行。

@azure-tools/typespec-client-generator-cli 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/azure-tools__typespec-client-generator-cli 是否存在。

@azure-tools/typespec-client-generator-cli 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@azure-tools/typespec-client-generator-cli 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20.19.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@azure-tools/typespec-client-generator-cli 可以商用吗?

@azure-tools/typespec-client-generator-cli 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@azure-tools/typespec-client-generator-cli 的下载量有多少?

根据 npm 官方下载统计,@azure-tools/typespec-client-generator-cli 在 2026/10/08 – 2026/11/06 这 30 天内被下载 51,880 次,日均约 1,729 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@azure-tools/typespec-client-generator-cli 还在维护吗?

最新版本 0.33.1 发布于 2026/05/02(6 个月前);至今共发布 60 个版本,其中过去 12 个月发布了 5 个;首次发布于 2023/10/21。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。