Claude Code 新手必问的 10 个问题,一次答清楚
. CLAUDE.md 到底怎么写?写了真的有用吗?
这个问题被问的频率排第一。几乎所有用 Claude Code 的人第一个困惑就是:这个文件是干什么的?不写行不行?
一句话回答:CLAUDE.md 就是你项目的「团队公约」。 Claude Code 启动时会自动读取它,把你写的规则当成团队共同约定来遵守。不写也能用,但等于你招了一个能力很强但完全不了解你们项目的新人,每次沟通都要从头交代背景。
一个实用的 CLAUDE.md 模板长这样:
CLAUDE.md
项目简介
用户订单系统,Spring Boot 3.2 + MyBatis-Plus + MySQL 8.0
常用命令
- 启动:
mvn spring-boot:run - 测试:
mvn test - 构建:
mvn clean package -DskipTests
代码规范
- 命名: 驼峰命名,表名用下划线分隔
- 分层: Controller 只做参数校验和路由,业务逻辑全部在 Service 层
- 数据库: 禁止在代码里写 SQL,统一用 XML mapper
已知坑点
- 订单表的 create_time 字段用的是 UTC,前端展示需要转东八区
- 第三方支付回调地址必须用 HTTPS,本地调试用 ngrok
为什么有效? Claude Code 的上下文窗口是有限的。如果你不写 CLAUDE.md,它每次都要通过读代码、问你问题来理解项目。写了之后,相当于把「新员工入职手册」直接拍在桌上,省掉大量来回对话的 Token。
我在一个 12 万行的 Java 项目里测试过:写 CLAUDE.md 之前,每次让 Claude Code 改代码平均需要 3-4 轮对话交代背景;写完之后,第一轮就能给出符合项目规范的方案。Token 消耗直接砍掉将近一半。
踩坑提醒: CLAUDE.md 不是越长越好。我见过有人写了 800 行的 CLAUDE.md,结果 Claude Code 每次对话都先把这 800 行塞进上下文,反而占了大量空间。控制在 100-200 行,只写 Claude Code 自己读代码读不出来的东西。
CLAUDE.md 的作用范围有三层,别搞混了:
文件位置 作用范围 适合写什么
项目根目录/CLAUDE.md 当前项目 技术栈、编码规范、常用命令
~/.claude/CLAUDE.md 所有项目 你的个人偏好、通用规则
子目录/CLAUDE.md 特定模块 模块特有的架构说明
全局的 ~/.claude/CLAUDE.md 我建议写两条:代码注释语言偏好(比如「注释用中文」)和通用规则(比如「永远不要在 main 分支上直接提交」)。项目级的放具体技术栈信息。这样换项目不用每次都重写。
CLAUDE.md 三层作用范围对比:全局、项目、子目录的优先级和适用场景
- Token 太贵了,怎么省?
成本焦虑是被问得第二多的问题。有读者说「用了一天 Claude Code,Token 花了 20 美元,心在滴血」。
先说结论:正常用法下,一天大概 3-8 美元。 如果你一天花了 20 美元,大概率是以下几种情况之一。
省钱的三个最有效手段:
第一,用好 /compact 命令。 这是最被低估的命令。当对话变长时,Claude Code 的上下文会越来越大,每次请求消耗的 Token 越来越多。/compact 会把历史对话压缩成摘要,Token 消耗立刻下降。
对话太长时,在终端里直接输入
/compact
也可以加自定义提示,指定保留什么信息
/compact 保留最近的代码修改记录和当前的bug讨论
一个真实的数字:我在一次重构会话里,上下文从 50K Token 压缩到 8K,单次请求成本从 0.3 美元降到 0.05 美元。
第二,大任务拆小。 别用一句话让 Claude Code 做一整块功能。比如「帮我重构整个用户模块」这句话,Claude Code 会读大量文件、生成大量输出。改成「先帮我把 UserService 里的查询方法抽到 UserQueryService」,每一步的 Token 消耗可控。
第三,善用 --model 切换模型。 简单任务用 Sonnet,复杂架构设计用 Opus。
日常开发用 Sonnet(便宜 5 倍)
claude --model claude-sonnet-4-20250514
复杂架构决策切 Opus
claude --model claude-opus-4-20250514
模型 输入价格 输出价格 适用场景
Sonnet $3/M tokens $15/M tokens 日常编码、文件修改、bug 修复
Opus $15/M tokens $75/M tokens 架构设计、复杂重构、多文件协调
Token 省钱三步流程:压缩上下文、拆小任务、切换模型
- MCP 是什么?怎么配置?
MCP(Model Context Protocol)是 Anthropic 推出的一个开放协议,简单说就是给 Claude Code 装「外挂工具」的标准接口。
你可以把它理解成 Claude Code 的「USB 接口」——通过这个协议,Claude Code 可以连接数据库、调用 API、操作浏览器、搜索文档等等。没有 MCP,Claude Code 只能读写本地文件;有了 MCP,它能干的事成倍扩展。
配置方式是在 .claude/settings.json(项目级)或 ~/.claude/settings.json(全局)中添加 MCP 服务器:
{
“mcpServers”: {
“postgres”: {
“command”: “npx”,
“args”: [“-y”, “@modelcontextprotocol/server-postgres”, “postgresql://localhost:5432/mydb”]
},
“filesystem”: {
“command”: “npx”,
“args”: [“-y”, “@modelcontextprotocol/server-filesystem”, “/path/to/allowed/dir”]
}
}
}
踩坑提醒: MCP 服务器启动失败是最常见的报错。90% 的情况是两个原因——Node.js 版本太低(需要 v18+),或者参数里的路径写错了。遇到问题先跑 node --version 检查版本,再仔细核对路径。
我目前日常用的 MCP 组合是:PostgreSQL(查数据库)、Browser(测试页面)、Fetch(调用 API)。三个覆盖了后端开发 80% 的场景。
MCP 与 Skill 的关系架构:MCP 提供原子工具,Skill 编排工作流,Claude Code 居中调度
- Skill 系统是什么?和 MCP 有什么区别?
这个问题特别好,因为很多人把 Skill 和 MCP 搞混了。
一句话区分:MCP 是「工具」,Skill 是「工作流」。
MCP 给 Claude Code 提供的是原子能力——查数据库、读文件、调 API。Skill 则是一套预定义的指令模板,告诉 Claude Code 「遇到某类任务,按这个流程走」。
打个比方:MCP 是给你一把螺丝刀,Skill 是给你一套「如何组装宜家书柜」的步骤说明书。螺丝刀可以拆任何东西,但只有说明书告诉你先装哪块板。
安装 Skill 的方式:
Skill 文件放在 ~/.claude/skills/ 目录下
mkdir -p ~/.claude/skills
把 skill 文件夹放进去即可
一个最简 Skill 文件夹的结构:
~/.claude/skills/my-skill/
├── SKILL.md # 必须,定义触发条件和执行流程
├── references/ # 可选,参考资料
└── templates/ # 可选,模板文件
什么时候用 MCP,什么时候用 Skill? 简单判断标准:如果你的需求是「给我一个能力」(比如查数据库),用 MCP;如果你的需求是「帮我按流程做某类事」(比如写一篇技术文章、做一个代码审查),用 Skill。
- 权限管理怎么配?总弹权限确认太烦了
Claude Code 默认会在执行任何有风险的操作前弹出确认。刚开始用觉得安全,用久了觉得烦——特别是写代码写到一半被打断节奏。
最实用的配置是 allowlist(白名单),把你确认安全的操作加进去:
{
“permissions”: {
“allow”: [
“Bash(npm test)”,
“Bash(npm run lint)”,
“Bash(mvn test)”,
“Bash(git status)”,
“Bash(git diff)”,
“Bash(git log:*)”,
“Read”,
“Edit”
],
“deny”: [
“Bash(rm -rf )",
"Bash(git push --force)”
]
}
}
三个安全原则:
只放行你确定安全的命令。 git status 和 mvn test 可以放心放行,rm 和 git push --force 永远不要放。
用模糊匹配。 Bash(git log:*) 匹配所有 git log 相关命令,不用每条都写。
分层配置。 个人常用命令放在 ~/.claude/settings.json(全局),项目特有的放在项目的 .claude/settings.json。
一个真实数据: 我的全局 allowlist 大概 15 条规则,覆盖了日常 90% 的操作。配合之后,一天的权限弹窗从 30+ 次降到 3-5 次,都是真正需要确认的操作(比如删除文件、推送代码)。
权限管理 allowlist vs denylist 对比:白名单放行 vs 黑名单拦截的安全策略
- Claude Code 和 Cursor / Copilot 该选哪个?
这是选型类问题,我直接说我的判断框架。
三者的核心差异不在能力,在交互模式。
维度 Claude Code Cursor GitHub Copilot
交互方式 终端对话 IDE 内嵌对话 IDE 内补全
核心优势 操作系统级别,能跑命令、读写文件 编辑器集成度高,所见即所得 补全速度快,IDE 无感嵌入
适合场景 大规模重构、多文件协调、项目级任务 单文件编辑、日常写码 行级/函数级补全
上下文能力 全项目扫描 + 外部工具 当前文件 + 编辑器上下文 当前文件 + 光标附近
我的建议不是三选一,而是组合用。
日常写代码用 Cursor(或 Copilot),因为补全速度快、不需要切换窗口。遇到大任务——比如「重构整个认证模块」「给项目加上单元测试」「排查一个跨 5 个文件的 bug」——切到 Claude Code,用对话式交互逐步推进。
打个比方:Copilot 是自动铅笔,随手记笔记用;Cursor 是智能笔记本,日常办公主力;Claude Code 是一个坐在你旁边的资深工程师,复杂问题拉他过来 pair programming。
- Hooks 怎么用?能做什么?
Hooks 是 Claude Code 的「自动化钩子」——在特定事件发生时自动执行你的脚本。
最实用的两个场景:
场景一:每次修改代码后自动跑 lint。
{
“hooks”: {
“PostToolUse”: [
{
“matcher”: “Edit|Write”,
“hooks”: [
{
“type”: “command”,
“command”: “cd $CLAUDE_PROJECT_DIR && npm run lint – --fix”
}
]
}
]
}
}
这样每次 Claude Code 修改文件后,自动跑一遍 lint 并修复格式问题,不用你手动提醒。
场景二:对话开始时自动加载环境信息。
{
“hooks”: {
“PreToolUse”: [
{
“matcher”: “Bash”,
“hooks”: [
{
“type”: “command”,
“command”: “echo ‘当前分支:’ $(git branch --show-current) ‘最新commit:’ $(git log --oneline -1)”
}
]
}
]
}
}
踩坑提醒: Hook 脚本的执行会影响 Claude Code 的响应速度。如果脚本跑超过 3 秒,会觉得 Claude Code 变慢了。建议把耗时操作异步化或者只在必要时触发。我在 PostToolUse 里加了一个跑测试的 Hook,结果每次改一个文件都要等 15 秒跑全量测试,差点以为网络卡了。后来改成只跑受影响的测试文件,才恢复正常速度。
Hook 的事件类型一共四种,搞清楚触发时机就不会乱用:
事件类型 触发时机 典型用途
PreToolUse 工具调用前 输入校验、权限拦截
PostToolUse 工具调用后 lint 格式化、自动测试
Notification Claude 需要你关注时 发消息到 Slack/飞书
Stop 对话结束时 清理临时文件、生成摘要
我见过一个很巧的用法:有人在 Notification 事件里接了 Bark(iOS 推送),Claude Code 跑长时间任务时,完成后会自动推送到手机上。这样你可以去干别的事,不用盯着终端等。
配置文件放在哪里也有讲究。 项目级的 Hook 放在 .claude/settings.json,全局的放 ~/.claude/settings.json。两者会合并,同名事件的 Hook 按项目优先级执行。
更多推荐

所有评论(0)