VS Code开发Strapi V5需装ESLint、Auto Import、REST Client三扩展,配置launch.json指向新develop.js路径并启用source-maps,运行npm run build后调试才生效,API测试须用API Token而非admin JWT。

VS Code 本身不内置 Strapi 支持,但能高效开发 Strapi V5 项目——关键在于用对扩展、配好调试、避免误踩 Node.js 版本和 TypeScript 类型生成的坑。
Strapi V5 项目在 VS Code 中必须装的三个扩展
Strapi V5 默认使用 ESM(type: "module"),且依赖现代 Node.js(≥18.17)和 TypeScript 5.3+。不装对扩展,连 npm run develop 都可能报错或断点不命中。
-
ESLint(必须):V5 的src目录含大量 TSX/JSX 文件,官方模板默认启用 ESLint;不装则无实时语法提示,import路径错误也难发现 -
Auto Import(强烈推荐):Strapi V5 的内容类型定义(如src/api/article/content-types/article/schema.ts)里常要手动导入Strapi类型,自动补全可省掉import type { Strapi } from '@strapi/strapi';这类重复劳动 -
REST Client(调试 API 必备):Strapi V5 的 REST API 默认启用,但需手动加Content-Type: application/json和Authorization才能调管理端接口;用.http文件比 Postman 更轻量,且能直接嵌入环境变量
调试 Strapi V5 后端服务:launch.json 不能照搬旧版配置
Strapi V5 不再支持 strapi dev 命令,而是改用 npm run develop 或 pnpm dev 启动,且入口已从 ./node_modules/strapi/bin/strapi.js 移至 ./node_modules/@strapi/strapi/dist/commands/develop.js。直接复用 V4 的 launch.json 会卡在 “waiting for debugger”。
- 必须设
"type": "node",不是"coreclr"或"pwa-node" -
"program"要指向${workspaceFolder}/node_modules/@strapi/strapi/dist/commands/develop.js,而非./node_modules/strapi/bin/strapi.js - 加
"env": { "NODE_OPTIONS": "--enable-source-maps" },否则断点打在schema.ts或自定义 controller 里不生效 - 启动前确保已运行
npm run build(V5 强制要求先构建 TS 类型定义),否则develop.js会因找不到dist报错退出
内容类型(Content Type)TS 定义文件里的常见陷阱
Strapi V5 自动生成的 schema.ts 放在 src/api/[name]/content-types/[name]/ 下,但它不是“只读模板”——你改它,Strapi 会覆盖;你不改它,controller 里拿不到强类型 ctx.body。平衡点在于理解它的生成逻辑。
- 所有字段名必须用
snake_case(如published_at),即使你在 Admin UI 里填的是Published At;写成publishedAt会导致ctx.body.publishedAt类型为any -
relation字段生成的类型名含Relation后缀(如author: Relation;),别手写成Author或漏掉泛型参数 - 自定义 controller 方法若返回新结构体,不要往
schema.ts里硬塞;应单独建types/index.ts并用declare module '@strapi/strapi'扩展Context类型
用 REST Client 测试 Strapi V5 API 时 Authorization 怎么填
V5 默认关闭公开访问,所有 GET /api/articles 类请求都返回 401,除非带有效 JWT。但 Strapi 管理员 token 是短期的(默认 30 分钟),不适合写死在 .http 文件里。
- 先用 Admin UI 创建一个 API Token(Settings → API Tokens → Create new API Token),选
Full access类型,复制token值 - 在
strapi.http里用@token = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...定义变量,后续请求统一用Authorization: Bearer {{token}} - 别用
admin用户的 JWT —— 它过期后.http文件就失效,且泄露 admin 权限风险高 - 测试未发布内容(
publishedAt: null)时,记得在请求头加Prefer: return=representation,否则 Strapi V5 默认只返回已发布项
Strapi V5 的类型系统和调试链路比 V4 更严格,但换来的是一致的 TS 提示和可控的 API 行为。最容易被忽略的是:每次改完 schema.ts 必须重跑 npm run build,否则 VS Code 里看到的类型是旧的,而运行时用的是新的——这种错位会让调试变成猜谜。


















