SuperAPI AI 工具集

nx-generate

编程与开发

查看项目

更新于 10-15 18:37

技能介绍

用途

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 包)。
  • 如果没有合适的生成器,可以停止使用此技能,但需要仔细考虑所有可用生成器。
  • 关于收费、价格、平台等具体信息暂未提供。