代码生成
将你的 monorepo 拆分成多个包是组织代码、加速任务和改善本地开发体验的好方法。借助 Turborepo 的代码生成功能,可以轻松地以结构化的方式为包、模块,甚至是单独的 UI 组件生成新的源代码,并将其与仓库的其余部分集成。
添加一个空包
向你的 monorepo 添加一个新的空应用或包。
查看 gen workspace
的所有可用选项。
复制现有包
你可以使用现有的工作区作为新应用或包的模板。这适用于现有 monorepo 中的工作区,也适用于来自其他仓库的远程工作区(通过 GitHub URL 指定)。
示例
通过复制仓库中现有的包,在你的 monorepo 中创建一个新的包。
通过复制远程包,在你的 monorepo 中创建一个新的工作区。
注意:从远程来源添加时,Turborepo 无法验证你的仓库是否具有所有必需的依赖项,以及是否正在使用正确的包管理器。在这种情况下,可能需要进行一些手动修改才能使新的工作区在你的仓库中按预期工作。
查看 gen workspace --copy
的所有可用选项。
自定义生成器
如果内置的生成器不符合你的需求,你可以使用 Plop 配置创建自己的自定义生成器。Turborepo 将自动检测仓库中的任何生成器配置,并使其可以通过命令行运行。
虽然 Turborepo 生成器构建在 Plop 之上,但它们不需要在你的仓库中安装 plop
作为依赖项。
虽然 Turborepo 理解所有 Plop 配置选项和功能,但它提供了一些额外的功能来改进在配置了 Turborepo 的仓库中编写生成器的体验。
- 生成器会自动发现、加载并按工作区组织(无需在单个配置文件中手动
load
它们) - 生成器会自动从定义它们的工作区的根目录运行
- 可以从你的仓库中的任何位置(或通过
--root
标志从外部)调用生成器 - 支持零配置的 TypeScript 生成器
- 不需要将
plop
安装为仓库的依赖项
已知问题
自定义生成器目前不支持 ESM 依赖项。
开始使用
要构建和运行自定义生成器,请使用 Turborepo 从 monorepo 中的任何位置运行以下命令。
系统将提示你选择现有的生成器,或者在还没有生成器的情况下创建一个。你也可以在仓库根目录或任何工作区内的 turbo/generators/config.ts
(或 config.js
)中手动创建你的配置。
如果正在使用 TypeScript,你需要安装 @turbo/gen
包作为 devDependency
,以便访问所需的 TS 类型。
例如,以下示例说明了一个 monorepo,其中包含三个生成器位置
在工作区中创建的生成器会自动从工作区根目录运行,而不是仓库根目录或生成器配置的位置。
这使你的生成器更易于编写。在 [workspace-root]
中创建文件只需要指定为 <file>
,而不是 ../../<file>
。
了解更多关于使用 Plop 创建自定义生成器的信息。
编写生成器
生成器配置文件是一个返回 Plop 配置对象的函数。配置对象用于定义生成器的提示和操作。
最简单的形式中,生成器配置文件如下所示
提示
提示是使用 Plop 提示编写的,用于从用户那里收集信息。
操作
操作可以使用内置的 Plop 操作,或者你定义的自定义操作函数
运行生成器
创建生成器配置文件后,可以跳过选择提示,直接使用以下命令运行指定的生成器
也可以使用 --args
将参数直接传递给生成器提示
有关更多信息,请参阅 Plop 文档中的跳过提示。
查看 gen
的所有可用选项。
这有帮助吗?