Strapi/Directus调试连不上主因是launch.json timeout过小(默认10秒),需设"timeout": 60;另需适配启动延迟、修正入口路径、确保Node版本≥18.17,并关闭sourcemap验证。

调试器连不上:launch.json 的 timeout 值太小
Strapi 和 Directus 启动慢是常态——它们要加载插件、连接数据库、构建管理面板路由,冷启动常超 30 秒。VSCode 默认的 timeout 是 10 秒,没等服务真正 ready 就断开连接,报 Cannot connect to the target 或直接卡在“正在启动…”。
必须显式延长超时时间:
- 在
.vscode/launch.json的对应配置里加"timeout": 60(单位秒),不要用0(无效) - 如果用
pwa-node类型,timeout是顶层字段;若用node类型(旧版),它得放在configurations[0]下,不是env里 - 别只改
port或address——超时才是第一道拦路虎
端口监听未就绪:Strapi/Directus 启动顺序不兼容调试器
VSCode 调试器默认假设 Node.js 进程一启动就立刻监听调试端口(如 --inspect=9229),但 Strapi v4+ 和 Directus 10+ 是先初始化框架、再启动 HTTP 服务,调试端口可能晚于进程启动 5–15 秒才真正 bind 成功。
解决方法不是等,而是让调试器“主动等”:
- 在
launch.json中启用"attachSimplePort": true(仅pwa-node支持),它会轮询端口直到可连 - 或改用
attach模式:先手动运行npm run develop -- --inspect=9229,再在 VSCode 里选 “Attach to Process”,避免抢跑 - 禁用 Strapi 的热重载(
strapi dev --no-watch)能减少初始化干扰,尤其在 WSL2 或 Remote-Container 环境下
调试器找不到入口文件:workspaceFolder 和 program 路径错位
Strapi 项目根目录下没有传统 index.js,入口实际是 node_modules/strapi/lib/commands/develop.js;Directus 则依赖 directus start CLI 包装器。直接写 "program": "${workspaceFolder}/index.js" 必然失败。
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
正确路径需分情况处理:
- Strapi v4:用
"program": "${workspaceFolder}/node_modules/strapi/lib/commands/develop.js",并确保"args": ["--no-daemon"](禁用后台模式,否则调试器无法 attach) - Directus:不推荐直接 debug CLI,应改用
"runtimeExecutable": "npx"+"runtimeArgs": ["directus", "start"],且必须配"env": {"NODE_OPTIONS": "--inspect=9229"} - 两者都建议关闭 sourcemap 验证:
"skipFiles": ["<node_internals>/**"]</node_internals>,避免因框架内部代码路径不匹配导致断点灰化
远程容器里调试失败:vscode-server 的 Node.js 版本不匹配
Remote-Container 场景下,VSCode 本地调试器和容器内 vscode-server 进程用的是不同 Node.js 版本。Strapi/Directus 要求 Node.js ≥ 18.17,但 vscode-server 默认带的 Node 可能仍是 16.x(尤其旧版 Dev Container 配置),导致调试适配器静默崩溃,控制台只显示 Extension host terminated unexpectedly。
验证和修复步骤:
- 进容器执行
node -v,对比code --status输出里的 “Remote Extension Host” Node 版本 - 在
.devcontainer/devcontainer.json里显式指定 Node 版本:"features": {"ghcr.io/devcontainers/features/node:1-22": {"version": "18.20"}} - 重启容器后,检查
~/.vscode-server/bin/*/node是否指向你指定的版本——别信which node,那是用户 shell 的
冷启动超时背后,真正卡住的往往不是代码,而是调试器和框架之间那几秒的“信任建立窗口”。路径、端口、超时、Node 版本,四个点漏掉任何一个,都会让断点永远灰着。

















