概述
Nest CLI 是一个命令行工具,用于帮助你初始化、开发和维护 Nest 应用。它可以在多个方面提供辅助,包括搭建项目骨架、以开发模式运行应用,以及为生产发布构建和打包应用。它也内置了最佳实践架构模式,鼓励你构建结构清晰的应用。
安装
注意
本指南使用 npm 来安装依赖,包括 Nest CLI。你当然也可以使用其他包管理器。
在 npm 下,操作系统命令行如何解析 nest CLI 二进制的位置有多种管理方式。这里我们使用 -g 选项将 nest 二进制全局安装。这种方式更方便,因此文档中的示例默认基于这种做法。
不过请注意,全局安装任意 npm 包,都意味着用户需要自行保证运行的是正确版本。这也意味着如果你有多个项目,它们都会使用同一个 CLI 版本。
一个更稳妥的替代方案是使用内置于 npm CLI 中的 npx(或其他包管理器中的类似能力),以确保你运行的是一个“受项目管理”的 Nest CLI 版本。我们建议你查阅 npx 文档,或咨询你的 DevOps 支持团队以获得更多信息。
使用 npm install -g 命令全局安装 CLI:
$ npm install -g @nestjs/cli提示
你也可以直接使用 npx @nestjs/cli@latest,而无需全局安装 CLI。
基本工作流
安装完成后,你就可以通过操作系统命令行中的 nest 可执行文件直接调用 CLI 命令。输入以下命令查看所有可用命令:
$ nest --help你也可以针对某个具体命令查看帮助。将下面示例中的 generate 替换成任意命令,例如 new、add 等,即可查看该命令的详细帮助:
$ nest generate --help要创建、构建并以开发模式运行一个新的基础 Nest 项目,请进入你希望作为新项目父目录的文件夹,然后执行:
$ nest new my-nest-project
$ cd my-nest-project
$ npm run start:dev然后在浏览器中打开 http://localhost:3000,即可看到新应用已启动。修改任意源文件后,应用会自动重新编译并重新加载。
提示
我们推荐使用 SWC builder 来获得更快的构建速度,其性能通常比默认的 TypeScript 编译器高约 10 倍。
项目结构
执行 nest new 时,Nest 会生成一套样板应用结构:创建一个新文件夹,并填充一组初始文件。你可以继续基于这个默认结构开发,并像本文档其他章节介绍的那样添加新组件。我们把 nest new 生成的这种项目结构称为标准模式。Nest 同时也支持另一种用于管理多个项目和类库的结构,称为monorepo 模式。
除了在 build 过程上的少量差异之外(本质上 monorepo 模式简化了 monorepo 风格项目结构中可能出现的构建复杂度),以及内置的类库支持之外,Nest 的其他特性及本文档内容都同样适用于标准模式和 monorepo 模式。事实上,你也可以在以后任意时刻轻松地从标准模式切换到 monorepo 模式,因此在你还处于学习阶段时,完全可以先不急着做这个决定。
这两种模式都可以用于管理多个项目。它们的区别可以简单总结如下:
| 特性 | 标准模式 | Monorepo 模式 |
|---|---|---|
| 多项目管理 | 各自独立的文件系统结构 | 单一文件系统结构 |
node_modules 与 package.json | 各自独立 | 在 monorepo 内共享 |
| 默认编译器 | tsc | webpack |
| 编译器配置 | 分别配置 | 提供 monorepo 默认值,可按项目覆盖 |
eslint.config.mjs、.prettierrc 等配置文件 | 分别配置 | 在 monorepo 内共享 |
nest build 与 nest start | 自动默认作用于上下文中的唯一项目 | 默认作用于 monorepo 中的默认项目 |
| 类库 | 手动管理,通常通过 npm 打包 | 内置支持,包括路径管理与打包 |
你可以阅读工作空间和类库章节,以更详细地了解哪种模式更适合你。
CLI 命令语法
所有 nest 命令都遵循同一种格式:
nest commandOrAlias requiredArg [optionalArg] [options]例如:
$ nest new my-nest-project --dry-run这里,new 是 commandOrAlias。new 的别名是 n。my-nest-project 是 requiredArg。如果未在命令行中提供 requiredArg,nest 会提示你输入。另外,--dry-run 也有一个等价的简写形式 -d。因此,下面的命令与上面完全等价:
$ nest n my-nest-project -d大多数命令,以及部分选项,都提供了别名。你可以运行 nest new --help 查看这些选项与别名,并验证你对上述语法的理解。
命令概览
你可以对下面任意命令执行 nest <command> --help 来查看该命令的专属选项。
每个命令的详细说明请参见用法。
| 命令 | 别名 | 说明 |
|---|---|---|
new | n | 创建一个新的标准模式应用,并生成可运行所需的全部样板文件。 |
generate | g | 基于 schematic 生成并/或修改文件。 |
build | 将应用或工作空间编译到输出目录。 | |
start | 编译并运行一个应用(或工作空间中的默认项目)。 | |
add | 导入一个被打包为 nest library 的类库,并执行其安装 schematic。 | |
info | i | 显示已安装的 nest 包信息,以及其他有用的系统信息。 |
环境要求
Nest CLI 需要一个启用了国际化支持(ICU)的 Node.js 二进制,例如 Node.js 官方下载页提供的官方构建版本。如果你遇到了与 ICU 相关的错误,请检查你的 Node.js 二进制是否满足这一要求。
node -p process.versions.icu如果该命令输出 undefined,说明你的 Node.js 二进制没有国际化支持。