Nest CLI 和脚本
Nest CLI 和脚本
本节提供了关于 nest 命令如何与编译器和脚本交互的额外背景信息,以帮助 DevOps 人员管理开发环境。
Nest 应用程序是一个标准的 TypeScript 应用程序,需要在执行之前编译为 JavaScript。有多种方法可以完成编译步骤,开发者/团队可以自由选择最适合他们的方式。考虑到这一点,Nest 提供了一套开箱即用的工具,旨在实现以下目标:
- 提供一个标准的构建/执行流程,在命令行中可用,具有合理的默认值,"开箱即用"。
- 确保构建/执行流程是开放的,以便开发者可以直接访问底层工具,使用原生功能和选项进行自定义。
- 保持完全标准的 TypeScript/Node.js 框架,以便整个编译/部署/执行管道可以由开发团队选择使用的任何外部工具进行管理。
这个目标通过 nest 命令、本地安装的 TypeScript 编译器和 package.json 脚本的组合来实现。我们在下面描述这些技术如何协同工作。这应该有助于您了解构建/执行流程每个步骤中发生的事情,以及如何在必要时自定义该行为。
nest 二进制文件
nest 命令是一个操作系统级别的二进制文件(即,从操作系统命令行运行)。这个命令实际上包含 3 个不同的区域,如下所述。我们建议您通过项目脚手架时自动提供的 package.json 脚本运行构建(nest build)和执行(nest start)子命令(如果您希望通过克隆仓库开始而不是运行 nest new,请参阅 typescript starter)。
构建
nest build 是标准 tsc 编译器或 swc 编译器(用于标准项目)或使用 ts-loader 的 webpack 打包器(用于 monorepos)的包装器。除了开箱即用地处理 tsconfig-paths 之外,它不添加任何其他编译功能或步骤。它存在的原因是大多数开发者,特别是刚开始使用 Nest 的开发者,不需要调整编译器选项(例如,tsconfig.json 文件),这有时可能很棘手。
有关更多详细信息,请参阅 nest build 文档。
执行
nest start 只是确保项目已构建(与 nest build 相同),然后以便携、简单的方式调用 node 命令来执行编译后的应用程序。与构建一样,您可以根据需要自定义此流程,可以使用 nest start 命令及其选项,或完全替换它。整个流程是标准的 TypeScript 应用程序构建和执行管道,您可以自由地管理该流程。
有关更多详细信息,请参阅 nest start 文档。
生成
nest generate 命令,顾名思义,生成新的 Nest 项目或其中的组件。
包脚本
在操作系统命令级别运行 nest 命令需要全局安装 nest 二进制文件。这是 npm 的标准功能,超出了 Nest 的直接控制范围。这样做的一个后果是,全局安装的 nest 二进制文件不会作为项目依赖项在 package.json 中管理。例如,两个不同的开发者可能运行两个不同版本的 nest 二进制文件。标准解决方案是使用包脚本,这样您就可以将构建和执行步骤中使用的工具视为开发依赖项。
当您运行 nest new 或克隆 typescript starter 时,Nest 会在新项目的 package.json 脚本中填充 build 和 start 等命令。它还将底层编译器工具(如 typescript)安装为开发依赖项。
您可以使用以下命令运行构建和执行脚本:
$ npm run build
和
$ npm run start
这些命令使用 npm 的脚本运行功能,使用本地安装的 nest 二进制文件执行 nest build 或 nest start。通过使用这些内置的包脚本,您可以完全依赖管理 Nest CLI 命令*。这意味着,通过遵循这种推荐的用法,您组织的所有成员都可以确保运行相同版本的命令。
*这适用于 build 和 start 命令。nest new 和 nest generate 命令不是构建/执行管道的一部分,因此它们在不同的上下文中操作,并且不附带内置的 package.json 脚本。
对于大多数开发者/团队,建议使用包脚本来构建和执行他们的 Nest 项目。您可以通过其选项(--path、--webpack、--webpackPath)完全自定义这些脚本的行为,和/或根据需要自定义 tsc 或 webpack 编译器选项文件(例如,tsconfig.json)。您也可以自由运行完全自定义的构建流程来编译 TypeScript(甚至直接使用 ts-node 执行 TypeScript)。
向后兼容性
因为 Nest 应用程序是纯 TypeScript 应用程序,所以以前版本的 Nest 构建/执行脚本将继续运行。您不需要升级它们。当您准备好时,您可以选择利用新的 nest build 和 nest start 命令,或继续运行以前的或自定义的脚本。
迁移
虽然您不需要进行任何更改,但您可能希望迁移到使用新的 CLI 命令,而不是使用 tsc-watch 或 ts-node 等工具。在这种情况下,只需在全局和本地安装最新版本的 @nestjs/cli:
$ npm install -g @nestjs/cli
$ cd /some/project/root/folder
$ npm install -D @nestjs/cli
然后,您可以将 package.json 中定义的 scripts 替换为以下内容:
"build": "nest build",
"start": "nest start",
"start:dev": "nest start --watch",
"start:debug": "nest start --debug --watch",