本节提供了有关 nest
命令如何与编译器和脚本交互的更多背景信息,以帮助 DevOps 人员管理开发环境。
Nest 应用程序是一个标准 TypeScript 应用程序,需要先编译为 JavaScript 才能执行。有多种方法可以完成编译步骤,开发人员/团队可以自由选择最适合他们的方式。考虑到这一点,Nest 提供了一组开箱即用的工具,旨在执行以下操作:
- 提供一个标准的构建/执行过程,可在命令行中使用,使用合理的默认值即可
正常工作
。 - 确保构建/执行过程是开放的,以便开发人员可以直接访问底层工具,使用本机功能和选项对其进行自定义。
- 保持完全标准的 TypeScript/Node.js 框架,以便整个编译/部署/执行管道可以由开发团队选择使用的任何外部工具管理。
此目标是通过结合使用 nest
命令、本地安装的 TypeScript 编译器和 package.json
脚本来实现的。我们将在下面描述这些技术如何协同工作。这应该有助于您了解构建/执行过程的每个步骤中发生的情况,以及如何在必要时自定义该行为。
nest 二进制文件
nest
命令是 OS 级二进制文件(即从 OS 命令行运行)。此命令实际上包含 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 项目或其中的组件。
打包脚本
在 OS 命令级别运行 nest
命令需要全局安装 nest
二进制文件。这是 npm 的标准功能,不在 Nest 的直接控制范围内。这样做的后果之一是,全局安装的 nest
二进制文件不作为 package.json
中的项目依赖项进行管理。例如,两个不同的开发人员可以运行两个不同版本的 nest
二进制文件。标准解决方案是使用包脚本,以便您可以将构建和执行步骤中使用的工具视为开发依赖项。
当您运行 nest new
或克隆 typescript starter 时,Nest 会使用 build
和 start
等命令填充新项目的 package.json
脚本。它还会将底层编译器工具(例如 typescript
)安装为 dev 依赖项。
您可以使用以下命令运行构建和执行脚本:
$ 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"
}