本文档介绍了如何在 NestJS 应用程序中集成和使用 Babel 进行 JavaScript 转译。有关使用 Webpack 进行打包的信息,请参阅 Webpack 集成。
Babel 是一个 JavaScript 编译器,它允许开发人员使用下一代 JavaScript 功能,同时保持与旧环境的兼容性。虽然 NestJS 应用程序通常使用 TypeScript 编写,但当不需要 TypeScript 或需要特定的 Babel 插件和预设时,Babel 提供了一种替代的转译方法。
来源: sample/09-babel-example/package.json24-37
要使用 Babel 与 NestJS 配合,您需要安装几个 Babel 相关的包
| 包 | 目的 |
|---|---|
@babel/core | 核心 Babel 编译器 |
@babel/cli | Babel 的命令行界面 |
@babel/node | 使用 Babel 即时转译运行 Node.js |
@babel/preset-env | 用于使用最新 JavaScript 功能的智能预设 |
@babel/plugin-proposal-decorators | 支持装饰器语法(对 NestJS 至关重要) |
@babel/plugin-transform-runtime | 重用 Babel 助手以减小包大小 |
@babel/runtime | 编译代码的运行时支持 |
@babel/register | 自动转译的 require 钩子 |
来源: sample/09-babel-example/package.json24-37
以下步骤概述了如何在 NestJS 项目中设置 Babel
按照 package.json 中的说明安装所需的 Babel 包
npm install --save-dev @babel/cli @babel/core @babel/node @babel/plugin-proposal-decorators @babel/plugin-transform-runtime @babel/preset-env @babel/register @babel/runtime
来源: sample/09-babel-example/package.json24-37
更新您的 package.json 脚本以使用 Babel
"scripts": {
"build": "babel src -d dist",
"start": "babel-node index.js",
"start:dev": "nodemon"
}
来源: sample/09-babel-example/package.json6-13
为了让 NestJS 应用程序与 Babel 正常工作,您需要特定的插件和配置来支持 NestJS 所依赖的装饰器和其他功能。
装饰器支持: @babel/plugin-proposal-decorators 插件至关重要,因为 NestJS 在很大程度上依赖于装饰器来处理控制器、模块、服务等。
运行时支持: @babel/plugin-transform-runtime 用于管理 Babel 注入到代码中的运行时助手。
环境预设: @babel/preset-env 会根据您的目标环境自动确定所需的 Babel 插件。
来源: sample/09-babel-example/package.json24-37
在开发过程中,您可以使用 babel-node 来运行您的应用程序,实现即时转译
npm run start
此命令运行 babel-node index.js,该命令一步完成转译和执行您的代码。
对于支持自动重载的开发服务器,请使用
npm run start:dev
这利用 nodemon 来监视更改并自动重启服务器。
要为生产构建应用程序
npm run build
这会使用 Babel 将您的源代码从 src 目录转译到 dist 目录。
来源: sample/09-babel-example/package.json6-13
示例项目使用 Jest 进行测试,并配置为与 Babel 转译后的 JavaScript 一起工作
package.json 中的 Jest 配置指定了
此配置告诉 Jest 在 src 目录中查找 .spec.js 文件,并理解 JavaScript 和 JSON 文件。
来源: sample/09-babel-example/package.json39-47
| 功能 | TypeScript 方法 | Babel 方法 |
|---|---|---|
| 类型检查 | 是,在编译时 | 否,需要 Flow 等附加工具 |
| 装饰器支持 | 原生 | 通过插件 |
| 元数据反射 | 通过 emitDecoratorMetadata | 需要额外设置 |
| 文件扩展名 | .ts | .js |
| 构建速度 | 可能较慢 | 通常更快 |
| IDE 集成 | 优秀 | 良好 |
| 学习曲线 | 更陡峭(TypeScript + JS) | 不那么陡峭(仅 JS) |
来源: sample/09-babel-example/package.json
来源: sample/09-babel-example/package.json
Babel 为 NestJS 应用程序提供了一种可行的 TypeScript 替代方案,特别是对于更熟悉 JavaScript 或拥有现有 JavaScript 代码库的团队。通过正确的插件和配置,Babel 可以支持 NestJS 所依赖的所有核心功能,包括装饰器和元数据反射。
虽然由于其类型安全和一流的支持,TypeScript 仍然是大多数 NestJS 应用程序的推荐方法,但 Babel 集成为特定用例和偏好提供了灵活性。