教程

现代化 Node.js 应用程序

学习使用 IBM Bob 进行应用程序现代化,将 Node.js Express API 从版本 16 升级到 22。在这个实践教程中尝试使用模式、批准和文学编码的 AI 辅助开发。

简介

Bob 是一个 AI SDLC(软件开发生命周期)合作伙伴,可以增强您现有的工作流程。 在本教程中,您将通过将 TypeScript Express API 从 Node.js 16 现代化到 Node.js 22 来学习 Bob 的一些核心功能。您不需要 Node.js 或 TypeScript 经验即可完成本教程。您将学习 Bob 如何分析依赖项和现代化代码模式。

您将学习的关键功能

Bob 提供四个基本功能,您将在升级 API 时使用:

  • 模式:为特定任务定制 Bob 行为的专业角色。
  • 上下文提及:在与 Bob 的对话中引用特定的项目元素,例如文件、文件夹或 Git 提交。
  • 批准工作流:在执行之前审查 Bob 计划使用的每个工具。
  • 文学编码:直接在编辑器中与 Bob 一起编写代码。在代码应该放置的位置用自然语言输入指令。

先决条件

本教程使用 TypeScript Express REST API 作为示例项目。但是,您不需要 Node.js 或 TypeScript 经验。

要完成本教程,您需要以下内容:

  • Docker 已安装并在您的工作站上运行。您将使用 Bob 为应用程序创建 Dockerfile。
  • Bob IDE 已安装。
  • 您已完成快速入门教程,以熟悉 Bob 的界面和功能。
  • 您可能希望为本教程开启一个新的上下文窗口。请参阅创建新上下文窗口教程获取说明。

设置您的工作空间

启动 IBM Bob 并克隆示例存储库以开始使用您将现代化的 Node.js 应用程序。

启动 IBM Bob

在您的计算机上启动 IBM Bob 应用程序。

打开 Bob 侧边栏

如果 Bob 侧边栏尚未打开,请通过单击导航栏旁边的 Bob 图标或使用快捷键 Option + Command + B(Mac)或 Ctrl + Alt + B (Windows)打开它。

IBM Bob IDE 中打开的 Bob 侧边栏

克隆教程存储库

通过单击 Bob IDE 面板左上角的文件图标来克隆包含示例应用程序的存储库。然后单击克隆存储库,并将以下 GitHub 存储库粘贴到搜索栏中。Bob 会询问您想将存储库保存在哪里。您可以将其保存在任何位置。

https://github.com/IBM/bob-demo.git

在 Bob IDE 中克隆存储库

打开存储库

当 Bob 询问您是否要打开克隆的存储库时,单击打开。如果 Bob 询问"您信任此文件夹中文件的作者吗?",请单击是,我信任作者

注意资源管理器中的项目文件和侧面的 Bob 聊天面板。

资源管理器中显示的项目文件以及 Bob 聊天面板

禁用自动批准

确保自动批准已关闭。你可以在权限中找到此设置。关闭自动批准后,Bob 在执行任何建议的更改之前会征求你的许可。

构建容器化环境

创建 Dockerfile 以在容器化环境中运行应用程序,消除在本地安装 Node.js 或依赖项的需要。

切换到 Agent 模式

通过单击模式选择下拉菜单并选择 Agent 将 Bob 切换到 Agent 模式。

模式是 Bob 尊重最小权限原则的一种方式。每种模式都授予 Bob 代表您提议特定任务集的权限。Agent 模式允许 Bob 编写、修改和重构代码。Bob 仍然在每次操作之前请求权限。

创建 Dockerfile

在 Bob 聊天面板中输入以下提示以要求 Bob 创建 Dockerfile。

为此 Node.js TypeScript 应用程序创建 Dockerfile。它应该使用 Node 16 以匹配当前应用程序版本,构建 TypeScript 代码,并在端口 `3000` 上运行应用程序。

Bob 将请求对多个文件的读取访问权限以了解 Dockerfile 的要求。单击批准以授予 Bob 读取这些文件的权限。

Bob 确定适当的 Dockerfile 结构并向您显示建议的文件。操作按钮出现在聊天输入字段上方。单击保存以创建文件。保存会在您的项目中写入或修改文件。在本教程的后面部分,Bob 更新 Dockerfile 以使用 Node 22。

验证旧版应用程序是否构建

在现代化之前,验证旧版代码是否正确构建和运行。此基线确保您可以识别现代化引入的任何问题。

在构建阶段,Bob 会告诉您构建失败,因为 Dockerfile 使用 npm ci,它需要一个不存在的 package-lock.json 文件。

在 Bob 聊天面板中,告诉 Bob 构建和测试应用程序。

使用 Docker 构建和测试旧版应用程序以验证它在现代化之前是否正常工作。应用程序应该在 /api/todos 使用示例数据响应 API 请求

测试后,清理容器。

Bob 要求您保存对 Dockerfile 的更改,该更改将修复 package-lock.json 问题,并显示以下消息:

构建失败,因为没有 package-lock.json 文件。我需要更新 Dockerfile 以使用 `npm install` 而不是 `npm ci`。让我修复这个问题。

Bob 检测和修复构建错误的能力是它如何与您合作在部署期间排除故障和解决问题的示例。

Bob 应用修复并完成构建后,它会显示构建和测试结果摘要,确认旧版应用程序在容器化环境中可以正常工作。您现在有了一个经过验证的基线,用于在下一节中现代化应用程序后进行比较。

您和 Bob 已验证旧版应用程序可以正常工作。

使用 Bob 的 Ask 模式探索 Node.js 代码库

在现代化之前,单击模式选择下拉菜单并切换到 Bob 的 Ask 模式。Ask 模式只能读取文件,因此您可以安全地探索代码而不会意外进行更改。您还可以在 Bob 聊天中输入 /ask 以切换到 Ask 模式。

使用 @ 上下文提及来审查项目

Bob 支持 @ 上下文提及,允许您在提示中直接引用特定文件、文件夹或问题。上下文提及为 Bob 提供有关您想讨论的内容的精确信息。

通过使用 @ 提及明确告诉 Bob 要分析哪些文件来探索 package.jsontsconfig.jsonDockerfile 文件。了解这些文件可以帮助您在进行任何更改之前了解现代化要求。

在 Bob 聊天面板中,运行以下提示:

@package.json 此项目使用哪个 Node.js 版本?哪些依赖项需要为 Node.js 22 更新?给我一个简短的摘要。

@ 符号告诉 Bob 将 package.json 作为上下文包含。Bob 不会立即开始回答;它首先探索您的代码库,读取文件,遵循模式并分析代码。不要中断此探索阶段。

Bob 识别 Node.js 22 所需的以下更新:

**当前 Node.js 版本:** 16.x

**Node.js 22 需要更新的依赖项:**

1. **@types/node**:^16.18.0 → ^22.x.x(Node.js 22 的 TypeScript 类型)
2. **typescript**:^4.9.5 → ^5.x.x(TypeScript 5+ 以更好地支持 Node.js 22)
3. **ts-node**:^10.9.1 → ^10.9.2+(确保与 TS 5 和 Node 22 兼容)

**已经兼容的依赖项:**
- **express**:^4.18.2 ✓(适用于 Node.js 22)
- **uuid**:^9.0.0 ✓(适用于 Node.js 22)
- **@types/express**:^4.17.17 ✓(兼容)
- **@types/uuid**:^9.0.0 ✓(兼容)

**摘要:** 只有 Node.js 特定的开发依赖项需要更新。运行时依赖项(Express、UUID)已经与 Node.js 22 兼容。

分析 TypeScript 配置

要求 Bob 分析项目的 TypeScript 配置:

@tsconfig.json 此 TypeScript 项目使用什么模块系统和编译器设置?哪些依赖项需要为 Node.js 22 更新?给我一个简短的摘要。

Bob 回应您需要为 Node.js 22 更新的以下组件:

**当前 TypeScript 配置:**

**模块系统:** CommonJS(`"module": "commonjs"`)
- 使用 `require()` 和 `module.exports` 的传统 Node.js 模块系统
- 输出:具有 CommonJS 语法的 `.js` 文件

**编译器设置:**
- **Target:** ES2020(编译为 ES2020 JavaScript)
- **Lib:** ES2020(使用 ES2020 标准库功能)
- **Module Resolution:** Node(标准 Node.js 解析算法)
- **Strict Mode:** 已启用(完整类型检查)

**Node.js 22 的推荐更新:**

1. **target**:ES2020 → **ES2022** 或 **ESNext**(利用更新的 JS 功能)
2. **lib**:ES2020 → **ES2022**(访问更新的 API)
3. **module**:考虑迁移到 **"node16"** 或 **"nodenext"** 以获得原生 ESM 支持
4. **moduleResolution**:"node" → **"node16"** 或 **"bundler"**(更好的现代解析)

**摘要:** 项目使用具有 ES2020 目标的旧版 CommonJS。对于 Node.js 22,您应该将目标/lib 更新到 ES2022+ 并考虑迁移到原生 ESM 模块(尽管 CommonJS 仍然可以正常工作)。

分析 Dockerfile

要求 Bob 分析项目的 Dockerfile:

@Dockerfile 此 Dockerfile 使用哪个 Node.js 版本?Node.js 22 需要更改什么?给我一个简短的摘要。

Bob 回应 Node.js 22 需要更新的内容:

**当前 Dockerfile Node.js 版本:** Node 16 Alpine(`node:16-alpine`)

**Node.js 22 所需的更改:**

1. **基础镜像(第 2 行):** `FROM node:16-alpine` → `FROM node:22-alpine`

**摘要:** 只需要更改一行:将基础镜像从 node:16-alpine 更新到 node:22-alpine。Dockerfile 的其余部分与 Node.js 22 兼容,尽管 npm 标志语法可以现代化

现在您了解了需要更新的内容。在下一节中,您切换到 Agent 模式并让 Bob 进行更改。

使用 Bob 的 Agent 模式现代化 API

Bob 确定了 package.jsontsconfig.jsonDockerfile 的以下现代化要求:

  • 在 package.json 和 Dockerfile 中将 Node.js 16 更改为 Node.js 22
  • 更新 TypeScript 编译器目标和模块设置
  • 修复过时的依赖项版本

要开始现代化应用程序,请切换回 Agent 模式,以便 Bob 可以进行代码更改。

在 Bob 聊天面板中,运行以下现代化提示。注意指向 Bob 正在处理的特定文件的 @ 引用:

@package.json @tsconfig.json @Dockerfile

将此 Express API 从 Node.js 16 现代化到 Node.js 22。保持 API 功能相同 - 这是平台升级,而不是功能更改。给我一个简短的摘要。

Bob 完成代码更新和测试后,会显示与以下内容类似的摘要:

Dockerfile — 更改了 2 行

- 两个 FROM node:16-alpine 阶段 → node:22-alpine

package.json — 更改了 3 个字段

- engines.node: 16.x → 22.x
- @types/node: ^16.18.0 → ^22.0.0
- typescript: ^4.9.5 → ^5.0.0

tsconfig.json — 更改了 4 个设置

- target: ES2020 → ES2023
- lib: ["ES2020"] → ["ES2023"]
- module: commonjs → node16(TypeScript 5 要求这与 moduleResolution 一致)
- moduleResolution: node → node16

您和 Bob 已经现代化了应用程序。

将现代化标记为完成

使用 Bob 的文学编码功能更新示例 todo 标题,将应用程序标记为已现代化。文学编码允许您直接在编辑器中与 Bob 一起编写代码,而不是使用聊天面板。

启用文学编码模式

在屏幕左侧的资源管理器选项卡中,导航到 express-todo-api 文件夹并单击 src/db.ts 以在编辑器中打开它。打开 src/db.ts 后,通过单击编辑器工具栏中的魔杖图标来切换文学编码模式。或者,您可以在 Mac 上按 Cmd + I,或在 Windows 和 Linux 上按 Ctrl + I

编写您的指令

在编辑器中打开的 src/db.ts 文件中,在任何代码之前将以下指令粘贴到文件顶部:

// 找到示例 todo 对象的 title 属性并将其更改为 "Welcome to the Modernized Node.js 22 API"

Bob 理解此注释是指令,而不是常规代码,因为您处于文学编码模式。您的指令在编辑器中突出显示。

生成代码

单击文档底部的生成

Bob 在构造函数中找到 sampleTodo 对象并向您显示更改。您将看到标题从以下更改:

之前:

title: "Learn Node.js modernization"

之后:

title: "Welcome to the Modernized Node.js 22 API"

接受更改

单击您单击生成的文档底部的全部接受以将更改应用于文件。

退出文学编码模式

单击文件顶部文学魔杖下方的退出以退出文学编码模式。

您已使用文学编码更新了 API。当您在下一节中测试 API 时,您将在 API 响应中看到此新标题。

使用 Docker 验证现代化的应用程序

通过重建和测试 Docker 容器来验证代码现代化和您的文学代码更改。

切换回 Agent 模式并描述您希望 Bob 验证的内容:

通过使用 Docker 构建和测试来验证现代化的 Node.js 22 应用程序是否有效。检查 API 是否在 /api/todos 响应并显示更新的 todo 标题。完成后清理。给我一个简短的摘要。我还想看到新标题的验证。

Bob 验证应用程序已现代化后,它会给您以下摘要:

✅ **验证完成 - Node.js 22 现代化成功**

**构建和测试结果:**
- 使用 Node.js 22 成功构建 Docker 镜像
- TypeScript 编译完成,无错误
- 应用程序启动并正确响应

**API 验证:**
{
  "id": "72459851-7953-4a9c-94d3-4f8f1c656d21",
  "title": "Welcome to the Modernized Node.js 22 API",
  "completed": false,
  "createdAt": "2026-02-16T16:35:49.132Z"
}

**已确认:**
- ✅ 更新的 todo 标题正确显示:"Welcome to the Modernized Node.js 22 API"
- ✅ API 端点 /api/todos 成功响应
- ✅ 所有功能在 Node.js 22 上运行
- ✅ 清理完成(容器和镜像已删除)

**摘要:** 现代化的 Express TODO API 在 Node.js 22 上完全正常运行,更新的示例数据显示新标题,确认现代化已完成。

API 正常工作,标题已更新为"Welcome to the Modernized Node.js 22 API",确认 Bob 在现代化 Node.js 版本和依赖项的同时保留了现有行为。

后续步骤

在本教程中,您学习了如何使用 Bob 将 Express API 从 Node.js 16 现代化到 Node.js 22。Bob 分析了您的依赖项,更新了配置文件,并现代化了 Docker 设置,同时保留了所有功能。

  • 了解 Bob 的代码审查功能 /review,以在提交工作之前捕获潜在问题。
  • 了解模式,这些是为您的特定任务定制 Bob 行为的专业角色。
  • 了解如何使用 Bob 的聊天界面,这是与 Bob 交互的主要方式。

然后,完成 IBM Bob 入门教程系列以了解有关 Bob 功能和能力的更多信息。

这个主题怎么样?