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