菜单

构建工具与配置

相关源文件

本文档提供了 NestJS 应用程序可用的构建工具和配置选项的全面概述。它解释了如何使用 TypeScript、Webpack 和 Babel 等不同工具配置、自定义和优化构建过程。有关部署相关信息,请参阅 部署和 Docker

NestJS 构建系统基础

NestJS 应用程序主要使用 TypeScript,在执行之前需要编译成 JavaScript。该框架支持多种构建工具和配置,以优化开发体验和生产性能。

NestJS CLI 在这些构建工具之上提供了一个抽象层,允许开发人员通过配置选项在它们之间切换。

来源:sample/08-webpack/package.json, sample/09-babel-example/package.json

默认构建配置

默认情况下,NestJS 使用 TypeScript 编译器(tsc)来构建应用程序。这反映在典型的 package.json 脚本中

构建过程通过以下方式配置

  1. tsconfig.json - 主要 TypeScript 配置
  2. tsconfig.build.json - 特定于构建的 TypeScript 配置(通常扩展 tsconfig.json 但排除测试文件)
  3. nest-cli.json - NestJS 特定构建选项

NestJS CLI 构建选项

NestJS CLI 通过 nest build 命令提供多个构建选项

选项描述
--watch启用监视模式,以便在文件更改时重新构建
--webpack使用 Webpack 进行打包
--webpackPath指定自定义 Webpack 配置
--tsc使用 TypeScript 编译器(默认)
--builder指定自定义构建器实现

Webpack 集成

Webpack 集成为 NestJS 应用程序提供了几个优势,包括:

  • 单个包输出
  • 热模块替换(HMR)
  • 高级代码优化
  • 特定于环境的配置

使用 NestJS 配置 Webpack

NestJS 应用程序可以通过 CLI 使用 Webpack

Webpack 示例中的 package.json 演示了此配置

sample/08-webpack/package.json7-9

Webpack HMR 配置

热模块替换 (HMR) 允许开发人员在不重新启动应用程序的情况下看到更改。这需要特定的 Webpack 配置。

Webpack HMR 需要以下关键依赖项:

sample/08-webpack/package.json31-36

Babel 集成

Babel 提供了一个以 JavaScript 转译为中心的替代构建系统,具有以下优势:

  • 以 JavaScript 为中心的开发(而非 TypeScript)
  • 灵活的插件系统
  • 更广泛的生态系统兼容性

使用 Babel 设置 NestJS

NestJS 需要特定的 Babel 插件来处理装饰器和其他 TypeScript 功能。

Babel 示例的 package.json 显示了所需的依赖项。

sample/09-babel-example/package.json25-32

以及相关的构建脚本。

sample/09-babel-example/package.json7-10

NestJS 的 Babel 配置

Babel 需要针对 NestJS 应用程序进行特定配置,主要用于支持装饰器和元数据反射。

插件/预设目的
@babel/plugin-proposal-decorators启用 NestJS 中广泛使用的装饰器语法。
@babel/plugin-transform-runtime防止辅助函数重复。
@babel/preset-env基于目标环境的智能转译。
@babel/register用于即时转译。

开发工具集成

Webpack 和 Babel 配置都可以通过开发工具进行增强。

使用 Webpack

  • ts-loader: 将 TypeScript 文件加载到 Webpack 中。
  • start-server-webpack-plugin: 在 HMR 期间管理服务器生命周期。
  • webpack-node-externals: 防止对 node_modules 进行打包。

使用 Babel

  • nodemon: 提供自动重启功能。
  • @babel/node: 支持直接执行兼容 Babel 的代码。

配置最佳实践

构建工具理想用例配置重点
TypeScript (tsc)简单的应用程序,明确的关注点分离。tsconfig.json 优化。
Webpack复杂的应用程序,生产优化,HMR 要求。分块,优化插件,环境配置。
Babel以 JavaScript 为中心的开发流程,支持旧版浏览器。专注的预设,最小化的转换插件。

生产优化

对于生产构建,请考虑以下优化:

  1. 使用 Webpack 进行最小化和 tree-shaking。
  2. 单独编译模块和控制器。
  3. 特定于环境的包配置。
  4. 使用 Babel 选择性地包含 polyfill。

来源:sample/08-webpack/package.json, sample/09-babel-example/package.json

测试配置

构建工具也会影响测试设置。

Jest 与 Babel 的配置

sample/09-babel-example/package.json39-47

此配置可确保 Jest 与 Babel 转译的代码正确运行。

结论

NestJS 提供了灵活的构建工具集成选项,以适应不同的项目需求和开发人员偏好。在 TypeScript 编译器、Webpack 和 Babel 之间的选择取决于具体需求。

  • TypeScript 编译器:最简单的选项,配置简单。
  • Webpack:强大的打包、优化和 HMR 功能。
  • Babel:以 JavaScript 为中心,拥有广泛的插件生态系统。

每种方法都有特定的配置要求,如示例项目所示,并且可以进行自定义以优化开发体验和生产性能。

来源:sample/08-webpack/package.json, sample/09-babel-example/package.json