Skip to content

概述

Nest CLI 是一个命令行工具,用于帮助你初始化、开发和维护 Nest 应用。它可以在多个方面提供辅助,包括搭建项目骨架、以开发模式运行应用,以及为生产发布构建和打包应用。它也内置了最佳实践架构模式,鼓励你构建结构清晰的应用。

安装

注意

本指南使用 npm 来安装依赖,包括 Nest CLI。你当然也可以使用其他包管理器。

在 npm 下,操作系统命令行如何解析 nest CLI 二进制的位置有多种管理方式。这里我们使用 -g 选项将 nest 二进制全局安装。这种方式更方便,因此文档中的示例默认基于这种做法。

不过请注意,全局安装任意 npm 包,都意味着用户需要自行保证运行的是正确版本。这也意味着如果你有多个项目,它们都会使用同一个 CLI 版本。

一个更稳妥的替代方案是使用内置于 npm CLI 中的 npx(或其他包管理器中的类似能力),以确保你运行的是一个“受项目管理”的 Nest CLI 版本。我们建议你查阅 npx 文档,或咨询你的 DevOps 支持团队以获得更多信息。

使用 npm install -g 命令全局安装 CLI:

bash
$ npm install -g @nestjs/cli

提示

你也可以直接使用 npx @nestjs/cli@latest,而无需全局安装 CLI。

基本工作流

安装完成后,你就可以通过操作系统命令行中的 nest 可执行文件直接调用 CLI 命令。输入以下命令查看所有可用命令:

bash
$ nest --help

你也可以针对某个具体命令查看帮助。将下面示例中的 generate 替换成任意命令,例如 newadd 等,即可查看该命令的详细帮助:

bash
$ nest generate --help

要创建、构建并以开发模式运行一个新的基础 Nest 项目,请进入你希望作为新项目父目录的文件夹,然后执行:

bash
$ 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_modulespackage.json各自独立在 monorepo 内共享
默认编译器tscwebpack
编译器配置分别配置提供 monorepo 默认值,可按项目覆盖
eslint.config.mjs.prettierrc 等配置文件分别配置在 monorepo 内共享
nest buildnest start自动默认作用于上下文中的唯一项目默认作用于 monorepo 中的默认项目
类库手动管理,通常通过 npm 打包内置支持,包括路径管理与打包

你可以阅读工作空间类库章节,以更详细地了解哪种模式更适合你。

CLI 命令语法

所有 nest 命令都遵循同一种格式:

bash
nest commandOrAlias requiredArg [optionalArg] [options]

例如:

bash
$ nest new my-nest-project --dry-run

这里,newcommandOrAliasnew 的别名是 nmy-nest-projectrequiredArg。如果未在命令行中提供 requiredArgnest 会提示你输入。另外,--dry-run 也有一个等价的简写形式 -d。因此,下面的命令与上面完全等价:

bash
$ nest n my-nest-project -d

大多数命令,以及部分选项,都提供了别名。你可以运行 nest new --help 查看这些选项与别名,并验证你对上述语法的理解。

命令概览

你可以对下面任意命令执行 nest <command> --help 来查看该命令的专属选项。

每个命令的详细说明请参见用法

命令别名说明
newn创建一个新的标准模式应用,并生成可运行所需的全部样板文件。
generateg基于 schematic 生成并/或修改文件。
build将应用或工作空间编译到输出目录。
start编译并运行一个应用(或工作空间中的默认项目)。
add导入一个被打包为 nest library 的类库,并执行其安装 schematic。
infoi显示已安装的 nest 包信息,以及其他有用的系统信息。

环境要求

Nest CLI 需要一个启用了国际化支持(ICU)的 Node.js 二进制,例如 Node.js 官方下载页提供的官方构建版本。如果你遇到了与 ICU 相关的错误,请检查你的 Node.js 二进制是否满足这一要求。

bash
node -p process.versions.icu

如果该命令输出 undefined,说明你的 Node.js 二进制没有国际化支持。

基于 NestJS 官方文档翻译