Cursor Composer 多文件生成需显式注入上下文、拆分原子任务、明确契约关系、手动引导跨文件重构,并强制指定路径别名以确保 import 正确。

Cursor Composer 多文件生成必须显式注入项目上下文
直接在空输入框里写“帮我写个用户管理模块”,大概率生成一堆孤立文件,import 路径错、类型不匹配、导出方式和你项目不一致。Composer 默认只看当前光标所在文件,不会自动扫描 src/types 或 tsconfig.json。
必须手动带入关键上下文:
- 用
@folder:src/hooks告诉它已有 Hooks 目录结构,新 Hook 会按useXxx命名、默认export default - 用
@file:src/types/index.ts引入类型定义,生成的 API 接口才能继承User等已有类型,而不是硬编interface User { id: number; name: string } - 用
@file:src/index.css并加说明“所有组件样式必须用className”,否则可能生成内联style或错误引用Button.module.css
多文件任务必须拆成 2–4 个原子单元,不能贪多
一次性让 Composer 生成 8 个文件,模型容易丢失契约关系,比如 api/users.ts 里定义了 fetchUsers(),但 useUsers.ts 却没调用它,反而自己发请求。
正确做法是先聚焦核心契约:
- 明确每个文件的职责:组件只管 render,Hook 封装逻辑,API 文件只做请求封装
- 在输入中写死调用链,例如:“
UserList.tsx使用useUsers;useUsers调用api/users.ts中的fetchUsers” - 生成后立刻检查三处:导入路径是否相对正确(
../api/users)、函数名是否大小写一致(fetchUsers≠FetchUsers)、导出是否为default或具名(和你项目惯例对齐)
重构已有代码时,Cursor 不会自动跨文件更新引用
你在 UserService.ts 里重命名一个函数为 getUserByIdV2,Cursor 可能只改了这个文件,而 UserController.ts 里仍调用旧名 —— 它不像 VS Code 的 F2 重命名那样依赖语言服务器做跨文件符号分析。
要让它真正“全自动生成修改方案”,得主动引导:
- 选中待重构代码块,按
Ctrl+I唤起 Composer,输入“把这段逻辑提取成独立 Hook,并在所有调用处替换,包括UserList.tsx和AdminPanel.tsx” - 如果涉及类型变更(如返回值从
any改为User[]),必须在指令里写明“同步更新src/types/api.ts中的ApiResponse类型定义” - 生成后别急着接受,先用
Ctrl+Shift+F全局搜旧函数名,确认无残留
生成结果里的 import 路径和跳转经常不准
这是最常被忽略的细节。Cursor 生成的 import { useUsers } from '../hooks/useUsers' 看起来没问题,但实际项目中你可能用了路径别名(@/hooks),或者 useUsers.ts 实际在 src/hooks/user/useUsers.ts。
它不读你的 jsconfig.json 或 compilerOptions.paths,所以:
- 生成前先在 Composer 输入里加一句:“所有 import 必须使用项目已有的路径别名,如
@/hooks、@/api” - 生成后立刻测试跳转:
Ctrl+Click点击 import 路径,如果打不开目标文件,说明路径错了,得手动修 - 跨目录导入(如从
src/pages导入src/utils)时,它倾向用相对路径,但你项目可能要求统一用别名 —— 这部分几乎总要手调


















