用途
nx-generate 是一个用于运行 Nx 生成器(Nx generators)的技能。Nx 生成器是强大的工具,可以搭建项目脚手架、执行自动化代码迁移,或自动化 monorepo 中的重复性任务。它们能确保代码库的一致性并减少样板代码工作。
该技能适用于以下场景:
- 创建新项目,如库(library)或应用(application)
- 搭建功能或样板代码
- 运行工作区专属或自定义生成器
- 执行任何已有 Nx 生成器可完成的任务
主要能力
- 发现可用的生成器:通过 Nx CLI 列出插件生成器和本地工作区生成器。
- 将生成器与用户请求匹配:识别能满足需求的生成器,优先使用本地工作区生成器。
- 获取生成器选项:使用 --help 了解可用选项、必填项和默认值。
- 阅读生成器源码:了解将创建或修改哪些文件、副作用以及选项之间的交互。
- 检查现有模式:在生成前研究代码库中类似产物,遵循命名约定、文件结构和配置模式。
- 干运行验证:使用 --dry-run 确认文件将创建在正确位置。
- 运行生成器:执行生成命令。
- 修改生成代码:按需调整生成结果。
- 格式化与验证:运行格式化工具并验证生成代码。
使用方式
1. 发现可用生成器
使用 Nx CLI 发现可用生成器:
- 列出某个插件的所有生成器:
npx nx list @nx/react - 查看可用插件:
npx nx list
这包括插件生成器(如 @nx/react:library)和本地工作区生成器。
2. 匹配生成器与用户请求
识别哪些生成器可以满足用户需求。考虑用户想要的产物类型、相关框架以及提到的具体生成器名称。
重要:当本地工作区生成器和外部插件生成器都能满足请求时,始终优先使用本地工作区生成器。本地生成器针对特定仓库的模式进行了定制。
如果没有合适的生成器,可以停止使用此技能。但举证责任很高——在决定没有适用生成器之前,请仔细考虑所有可用生成器。
3. 获取生成器选项
使用 --help 标志了解可用选项:
npx nx g @nx/react:library --help
注意必填选项、可能需要覆盖的默认值,以及与用户请求相关的选项。
库的可构建性
除非有特定理由需要可构建,否则默认使用不可构建库。
| 类型 | 何时使用 | 生成器标志 |
|---|---|---|
| 不可构建(默认) | 由应用消费的内部 monorepo 库 | 无 --bundler 标志 |
| 可构建 | 发布到 npm、跨仓库共享、用于缓存命中的稳定库 | --bundler=vite 或 --bundler=swc |
不可构建库:
- 直接导出 .ts/.tsx 源码
- 由消费者的打包器编译
- 开发体验更快,配置更少
可构建库:
- 拥有自己的构建目标
- 对很少变化的稳定库有用(缓存命中)
- 发布到 npm 所必需
如果不清楚,询问用户:“这个库应该是可构建的(有自己的构建步骤,更好的缓存)还是不可构建的(直接消费源码,设置更简单)?”
4. 阅读生成器源码
这一步至关重要。仅凭 schema 无法告诉你一切。阅读源码有助于:
- 确切了解将创建/修改哪些文件以及位置
- 理解副作用(更新配置、安装依赖等)
- 识别 schema 中不明显的行文和选项
- 理解选项之间如何交互
查找生成器源码:
- 对于插件生成器:使用
node -e "console.log(require.resolve('@nx/<plugin>/generators.json'));"找到 generators.json,然后从那里定位源码 - 如果失败,直接从
node_modules/<plugin>/generators.json读取 - 对于本地生成器:通常在
tools/generators/或本地插件目录中。在仓库中搜索生成器名称。
阅读源码后,重新考虑:这是正确的生成器吗?如果不是,回到第 2 步。
⚠️ --directory 标志的行为可能具有误导性。它应指定生成的库或组件的完整路径,而不是将在其中生成的父路径。
# ✅ 正确 - directory 是库的完整路径
nx g @nx/react:library --directory=libs/my-lib
# 生成 libs/my-lib/package.json 等
# ❌ 错误 - 这将在 libs 和 libs/src/... 创建文件
nx g @nx/react:library --name=my-lib --directory=libs
# 生成 libs/package.json 等
5. 检查现有模式
在生成之前,检查代码库的目标区域:
- 查看类似的现有产物(其他库、应用等)
- 识别命名约定、文件结构和配置模式
- 注意使用了哪些测试运行器、构建工具和 linter
- 配置生成器以匹配这些模式
6. 干运行验证文件位置
始终先使用 --dry-run 运行,以验证文件将创建在正确位置:
npx nx g @nx/react:library --name=my-lib --dry-run --no-interactive
仔细检查输出。如果文件将创建在错误位置,根据从生成器源码中学到的内容调整选项。
注意:某些生成器不支持 dry-run(例如,如果它们安装 npm 包)。如果 dry-run 因此失败,继续实际运行生成器。
7. 运行生成器
执行生成器:
nx generate <generator-name> <options> --no-interactive
提示:新包通常需要连接工作区依赖(例如,导入共享类型、被应用消费)。link-workspace-packages 技能可以帮助正确添加这些。
8. 修改生成代码(如需要)
生成器提供起点。按需修改输出以:
- 添加或修改所请求的功能
- 调整导入、导出或配置
- 与现有代码模式集成
重要:如果你替换或删除生成的测试文件(例如 *.spec.ts),要么编写有意义的替换测试,要么从项目配置中移除测试目标。空的测试套件会导致 nx test 失败。
9. 格式化与验证
格式化所有生成/修改的文件:
nx format --fix
此示例用于内置的 nx 格式化(使用 prettier)。此工作区可能有其他格式化工具,在适当时使用它们。
然后验证生成的代码可以工作。请记住,你通过生成器或后续修改所做的更改可能会影响各种项目,因此通常仅为你刚创建的产物运行目标是不够的。
# 这些目标只是示例!
nx run-many -t build,lint,test,typecheck
这些目标是许多工作区中常用的示例。你应该研究此工作区及其项目可用的其他目标。CI 配置通常是哪些关键目标必须通过的良好指南。
如果验证失败但问题可控(少量 lint 错误、轻微类型问题),修复它们。如果问题广泛,先尝试明显的修复,然后向用户升级,详细说明生成了什么、什么失败了以及你尝试了什么。
关键原则
- 始终使用 --no-interactive - 防止会挂起执行的提示
- 阅读生成器源码 - 仅凭 schema 不够;理解生成器实际做什么
- 匹配现有仓库模式 - 研究仓库中类似产物并遵循其约定
- 使用 lint/test/build/typecheck 等验证 - 生成的代码必须通过验证。列出的目标只是示例,使用适合此工作区的目标。
适用场景
- 在 Nx monorepo 中创建新的库或应用
- 搭建功能或样板代码
- 运行工作区专属或自定义生成器
- 执行任何已有 Nx 生成器可完成的任务
限制
- 某些生成器不支持 dry-run(例如,如果它们安装 npm 包)。
- 如果没有合适的生成器,可以停止使用此技能,但需要仔细考虑所有可用生成器。
- 关于收费、价格、平台等具体信息暂未提供。