跳到内容

调试

本文档解释了如何使用 VS Code 调试器Chrome DevToolsFirefox DevTools,使用完整的源映射支持来调试 Next.js 前端和后端代码。

任何可以附加到 Node.js 的调试器也可以用于调试 Next.js 应用程序。您可以在 Node.js 调试指南 中找到更多详细信息。

使用 VS Code 进行调试

在您的项目根目录创建一个名为 .vscode/launch.json 的文件,内容如下

launch.json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Next.js: debug server-side",
      "type": "node-terminal",
      "request": "launch",
      "command": "npm run dev"
    },
    {
      "name": "Next.js: debug client-side",
      "type": "chrome",
      "request": "launch",
      "url": "https://127.0.0.1:3000"
    },
    {
      "name": "Next.js: debug client-side (Firefox)",
      "type": "firefox",
      "request": "launch",
      "url": "https://127.0.0.1:3000",
      "reAttach": true,
      "pathMappings": [
        {
          "url": "webpack://_N_E",
          "path": "${workspaceFolder}"
        }
      ]
    },
    {
      "name": "Next.js: debug full stack",
      "type": "node",
      "request": "launch",
      "program": "${workspaceFolder}/node_modules/.bin/next",
      "runtimeArgs": ["--inspect"],
      "skipFiles": ["<node_internals>/**"],
      "serverReadyAction": {
        "action": "debugWithEdge",
        "killOnServerStop": true,
        "pattern": "- Local:.+(https?://.+)",
        "uriFormat": "%s",
        "webRoot": "${workspaceFolder}"
      }
    }
  ]
}

注意:要在 VS Code 中使用 Firefox 调试,您需要安装 Firefox 调试器扩展

如果您使用 Yarn,则可以将 npm run dev 替换为 yarn dev;如果您使用 pnpm,则替换为 pnpm dev

在“Next.js: debug full stack”配置中,serverReadyAction.action 指定服务器准备就绪时要打开的浏览器。 debugWithEdge 表示启动 Edge 浏览器。如果您使用 Chrome,请将此值更改为 debugWithChrome

如果您要更改应用程序启动的端口号,请将 https://127.0.0.1:3000 中的 3000 替换为您正在使用的端口。

如果您从根目录以外的目录运行 Next.js(例如,如果您正在使用 Turborepo),那么您需要在服务器端和全栈调试任务中添加 cwd。 例如,"cwd": "${workspaceFolder}/apps/web"

现在转到调试面板(Windows/Linux 上按 Ctrl+Shift+D,macOS 上按 ⇧+⌘+D),选择一个启动配置,然后按 F5 或从命令面板中选择 调试:开始调试 以启动调试会话。

在 Jetbrains WebStorm 中使用调试器

单击列出运行时配置的下拉菜单,然后单击 Edit Configurations...(编辑配置...)。 创建一个 JavaScript Debug(JavaScript 调试)调试配置,并将 https://127.0.0.1:3000 作为 URL。 根据您的喜好进行自定义(例如,用于调试的浏览器,存储为项目文件),然后单击 OK(确定)。 运行此调试配置,选定的浏览器应自动打开。 此时,您应该有两个处于调试模式的应用程序:NextJS node 应用程序和客户端/浏览器应用程序。

使用浏览器开发者工具进行调试

客户端代码

像往常一样通过运行 next devnpm run devyarn dev 启动您的开发服务器。服务器启动后,在您首选的浏览器中打开 https://127.0.0.1:3000(或您的备用 URL)。

对于 Chrome

  • 打开 Chrome 的开发者工具(Windows/Linux 上按 Ctrl+Shift+J,macOS 上按 ⌥+⌘+I
  • 转到 Sources(源)选项卡

对于 Firefox

  • 打开 Firefox 的开发者工具(Windows/Linux 上按 Ctrl+Shift+I,macOS 上按 ⌥+⌘+I
  • 转到 Debugger(调试器)选项卡

在任一浏览器中,任何时候您的客户端代码到达 debugger 语句时,代码执行将暂停,并且该文件将出现在调试区域中。您也可以搜索文件以手动设置断点

  • 在 Chrome 中:在 Windows/Linux 上按 Ctrl+P 或在 macOS 上按 ⌘+P
  • 在 Firefox 中:在 Windows/Linux 上按 Ctrl+P 或在 macOS 上按 ⌘+P,或使用左侧面板中的文件树

请注意,搜索时,您的源文件路径将以 webpack://_N_E/./ 开头。

服务器端代码

要使用浏览器 DevTools 调试服务器端 Next.js 代码,您需要将 --inspect 标志传递给底层 Node.js 进程

终端
NODE_OPTIONS='--inspect' next dev

须知:使用 NODE_OPTIONS='--inspect=0.0.0.0' 以允许从 localhost 外部进行远程调试访问,例如在 Docker 容器中运行应用程序时。

如果您正在使用 npm run devyarn dev,则应更新 package.json 上的 dev 脚本

package.json
{
  "scripts": {
    "dev": "NODE_OPTIONS='--inspect' next dev"
  }
}

使用 --inspect 标志启动 Next.js 开发服务器将如下所示

终端
Debugger listening on ws://127.0.0.1:9229/0cf90313-350d-4466-a748-cd60f4e47c95
For help, see: https://node.org.cn/en/docs/inspector
ready - started server on 0.0.0.0:3000, url: https://127.0.0.1:3000

对于 Chrome

  1. 打开一个新标签页并访问 chrome://inspect
  2. 单击 Configure...(配置...)以确保列出两个调试端口
  3. 如果 localhost:9229localhost:9230 尚未出现,则将它们都添加进去
  4. Remote Target(远程目标)部分查找您的 Next.js 应用程序
  5. 单击 inspect(检查)以打开一个单独的 DevTools 窗口
  6. 转到 Sources(源)选项卡

对于 Firefox

  1. 打开一个新标签页并访问 about:debugging
  2. 单击左侧边栏中的 This Firefox(此 Firefox)
  3. Remote Targets(远程目标)下,找到您的 Next.js 应用程序
  4. 单击 Inspect(检查)以打开调试器
  5. 转到 Debugger(调试器)选项卡

服务器端代码调试与客户端调试类似。搜索文件 (Ctrl+P/⌘+P) 时,您的源文件路径将以 webpack://{application-name}/./ 开头(其中 {application-name} 将替换为您应用程序的名称,具体取决于您的 package.json 文件)。

使用浏览器开发者工具检查服务器错误

当您遇到错误时,检查源代码可以帮助追踪错误的根本原因。

Next.js 将在错误覆盖层上的 Next.js 版本指示器下方显示一个 Node.js 图标。 通过单击该图标,DevTools URL 将复制到您的剪贴板。 您可以使用该 URL 打开一个新的浏览器标签页,以检查 Next.js 服务器进程。

在 Windows 上调试

Windows 用户在使用 NODE_OPTIONS='--inspect' 时可能会遇到问题,因为 Windows 平台不支持该语法。 要解决此问题,请安装 cross-env 包作为开发依赖项(npmyarn 使用 -D),并将 dev 脚本替换为以下内容。

package.json
{
  "scripts": {
    "dev": "cross-env NODE_OPTIONS='--inspect' next dev"
  }
}

cross-env 将设置 NODE_OPTIONS 环境变量,无论您在哪个平台(包括 Mac、Linux 和 Windows)上,都允许您在不同设备和操作系统上保持一致地进行调试。

须知:确保在您的机器上禁用 Windows Defender。 此外部服务将检查每个读取的文件,据报告,这会大大增加 next dev 的快速刷新时间。 这是一个已知问题,与 Next.js 无关,但它确实会影响 Next.js 开发。

更多信息

要了解有关如何使用 JavaScript 调试器的更多信息,请查看以下文档