学习目标:读完本文,你将独立完成 Claude Code 的全平台安装、认证配置、权限理解,并能用一个完整的 CLI 工具项目验证整个工作流。适合零编程经验或仅写过后端脚本的开发者。
适用人群:首次接触 Claude Code 的开发者、从 ChatGPT/Copilot 迁移过来的工程师、对 AI 辅助编程感兴趣的技术管理者。
在安装 Claude Code 之前,确认以下环境就绪:
| 条件 | 最低要求 | 推荐配置 |
|---|---|---|
| 操作系统 | macOS 12+、Ubuntu 20.04+、Windows 10+(WSL2) | macOS 14+、Ubuntu 22.04+ |
| Node.js | v18.0+ | v20 LTS(通过 nvm 安装) |
| 终端 | 系统自带终端 | iTerm2 / Windows Terminal / Warp |
| Git | 2.30+ | 最新稳定版 |
| 账号 | Anthropic 账号(API Key 或 Claude Pro/Max 订阅) | Claude Max 订阅(含 API 额度) |
# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
# 重新加载 shell
source ~/.bashrc # 或 ~/.zshrc
# 安装 Node.js 20 LTS
nvm install 20
nvm use 20
# 验证
node --version # 应输出 v20.x.x
npm --version # 应输出 10.x.x
git --version # 应输出 git version 2.3x+
Windows 用户注意:Claude Code 在 Windows 上必须通过 WSL2 运行。安装 WSL2:
powershell wsl --install然后在 WSL2 的 Ubuntu 环境中执行后续所有步骤。
npm install -g @anthropic-ai/claude-code
验证安装:
claude --version
# 输出示例:1.0.x
在 VS Code 扩展市场搜索 "Claude Code" 并安装。安装后侧边栏会出现 Claude 图标,点击即可在 IDE 内使用。
优劣对比:VS Code 扩展集成了编辑器体验,但 CLI 模式更灵活,支持管道和脚本编排。建议新手两个都装,日常用 VS Code 扩展,复杂任务切 CLI。
从 Anthropic 官网下载 Claude Desktop 应用,内置 Claude Code 功能。适合不习惯终端的用户。
如果你已有 Claude Pro 或 Max 订阅,直接运行:
claude
首次启动会弹出浏览器进行 OAuth 登录。登录成功后即可使用,无需 API Key。
# 设置 API Key
export ANTHROPIC_API_KEY="sk-ant-api03-xxxxxxxxxxxxx"
# 建议写入 shell 配置文件
echo 'export ANTHROPIC_API_KEY="sk-ant-api03-xxxxxxxxxxxxx"' >> ~/.bashrc
source ~/.bashrc
安全提示:永远不要把 API Key 提交到 Git 仓库。在
.gitignore中加入.env文件。
对于无法直接访问 Anthropic API 的用户,可以配置代理端点:
export ANTHROPIC_BASE_URL="https://your-proxy-endpoint.com/v1"
export ANTHROPIC_API_KEY="your-key"
Claude Code 的权限系统是其安全核心。理解它,是避免"AI 删了我的代码"这类事故的第一步。
graph TD
A[启动 Claude Code] --> B{选择权限模式}
B -->|默认| C[交互确认模式]
B -->|--dangerously-skip-permissions| D[自动执行模式]
B -->|--allowedTools| E[白名单模式]
C --> F{操作类型}
F -->|读取文件| G[自动允许]
F -->|写入文件| H[弹窗确认]
F -->|执行命令| I[弹窗确认]
D --> J[所有操作自动执行<br/>⚠️ 仅限受信环境]
E --> K[仅白名单操作自动执行]
| 场景 | 推荐模式 | 原因 |
|---|---|---|
| 学习阶段 | 交互确认(默认) | 逐步理解 Claude 做什么 |
| 日常开发 | 交互确认 | 对关键操作保持人工审核 |
| CI/CD 管道 | --dangerously-skip-permissions |
自动化需要无人值守 |
| 敏感项目 | 白名单模式 | 精确控制允许的操作 |
Claude Code 的权限可以通过 .claude/settings.json 持久化:
{
"permissions": {
"allow": [
"Bash(npm test)",
"Bash(git status)",
"Bash(git diff *)",
"Read(*)"
],
"deny": [
"Bash(rm -rf *)",
"Bash(curl * | bash)"
]
}
}
新手第一原则:学习阶段,不要配置
deny列表之外的任何自动执行。每次 Claude 请求执行命令时,仔细阅读弹出的确认信息。
CLAUDE.md 是 Claude Code 理解你项目的核心配置文件。没有它,Claude 就像一个不了解项目背景的新员工。
graph LR
A["~/.claude/CLAUDE.md<br/>全局配置"] --> B["项目根目录/CLAUDE.md<br/>项目配置"]
B --> C["子目录/CLAUDE.md<br/>模块配置"]
style A fill:#e1f5fe
style B fill:#fff3e0
style C fill:#e8f5e9
~/.claude/CLAUDE.md:所有项目共享的偏好(语言、风格)项目根目录/CLAUDE.md:项目特定的规则和结构子目录/CLAUDE.md:子模块的特殊规则创建你的第一个 CLAUDE.md:
mkdir -p my-first-project && cd my-first-project
git init
# CLAUDE.md
## 项目概述
一个用 Node.js 编写的命令行 TODO 管理工具。
## 技术栈
- 运行时:Node.js 20 LTS
- 语言:JavaScript(ES Module)
- 测试:Vitest
- 无外部依赖
## 常用命令
- 运行:`node src/index.js`
- 测试:`npx vitest`
- 代码风格检查:无(项目简单)
## 项目结构
- `src/index.js` — 入口文件
- `src/todo.js` — TODO 核心逻辑
- `src/storage.js` — 数据持久化
- `tests/` — 测试文件
## 编码规范
- 使用 ES Module(import/export)
- 函数使用驼峰命名
- 优先使用 const,避免 var
- 每个函数不超过 20 行
## 注意事项
- 不要安装额外的 npm 包
- 数据存储在项目根目录的 `.todos.json` 文件中
- 所有用户交互通过 console.log/console readline
Claude Code 内置了 /init 命令,可以自动分析项目并生成 CLAUDE.md:
claude
> /init
Claude 会扫描项目结构、package.json、README 等文件,自动生成一份基础 CLAUDE.md,你可以在此基础上修改。
进入 Claude Code 后,你会看到一个交互式提示符。以下是必须掌握的核心操作:
| 命令 | 功能 | 使用频率 |
|---|---|---|
/init |
初始化 CLAUDE.md | 每个项目一次 |
/help |
查看帮助 | 按需 |
/compact |
压缩对话历史,释放上下文 | 频繁 |
/clear |
清除当前对话 | 按需 |
/cost |
查看当前会话 Token 消耗 | 频繁 |
/review |
让 Claude 审查代码变更 | 按需 |
/mcp |
管理 MCP 服务器 | 按需 |
/fast |
切换快速模式(同模型,更快输出) | 按需 |
/model |
切换模型(opus/sonnet/haiku) | 按需 |
| 快捷键 | 功能 |
|---|---|
Enter |
发送消息 |
Shift+Enter |
换行(不发送) |
Ctrl+C |
取消当前操作 |
Ctrl+D |
退出 Claude Code |
↑/↓ |
浏览历史消息 |
Tab |
自动补全文件路径 |
# 非交互模式:执行单个提示词
claude -p "解释这个项目的结构"
# 管道模式:结合 Unix 管道使用
cat error.log | claude -p "分析这段错误日志"
# 指定模型
claude --model sonnet
# 继续上次会话
claude --continue
# 恢复最近一次会话
claude --resume
这是本文的核心部分。我们将用 Claude Code 从零开始,一步步构建一个可用的命令行 TODO 管理工具。
# 创建项目目录
mkdir -p todo-cli && cd todo-cli
git init
# 创建 package.json
cat > package.json << 'EOF'
{
"name": "todo-cli",
"version": "1.0.0",
"type": "module",
"main": "src/index.js",
"scripts": {
"start": "node src/index.js",
"test": "npx vitest run"
}
}
EOF
启动 Claude Code:
claude
输入你的第一条项目指令:
请帮我创建一个命令行 TODO 管理工具。要求:
1. 支持添加、列出、完成、删除 TODO 项
2. 数据持久化到 .todos.json 文件
3. 使用 ES Module 语法
4. 不使用任何第三方依赖
5. 每个操作有清晰的命令行输出
Claude Code 会: 1. 分析需求,规划文件结构 2. 逐一创建文件,每步请求你的确认 3. 运行测试验证功能
todo-cli/
├── CLAUDE.md
├── package.json
├── src/
│ ├── index.js # 入口:解析命令行参数
│ ├── todo.js # 核心:TODO 增删改查
│ └── storage.js # 持久化:读写 JSON 文件
├── tests/
│ ├── todo.test.js
│ └── storage.test.js
└── .todos.json # 运行时生成
src/storage.js:
import { readFile, writeFile } from 'fs/promises';
import { existsSync } from 'fs';
const FILE_PATH = '.todos.json';
export async function loadTodos() {
if (!existsSync(FILE_PATH)) {
return [];
}
const data = await readFile(FILE_PATH, 'utf-8');
return JSON.parse(data);
}
export async function saveTodos(todos) {
await writeFile(FILE_PATH, JSON.stringify(todos, null, 2), 'utf-8');
}
src/todo.js:
import { loadTodos, saveTodos } from './storage.js';
export async function addTodo(text) {
const todos = await loadTodos();
const newTodo = {
id: Date.now(),
text,
done: false,
createdAt: new Date().toISOString()
};
todos.push(newTodo);
await saveTodos(todos);
console.log(`✅ 已添加: ${text} (ID: ${newTodo.id})`);
}
export async function listTodos() {
const todos = await loadTodos();
if (todos.length === 0) {
console.log('📋 暂无 TODO 项');
return;
}
console.log('📋 TODO 列表:');
todos.forEach(t => {
const status = t.done ? '✅' : '⬜';
console.log(` ${status} [${t.id}] ${t.text}`);
});
}
export async function completeTodo(id) {
const todos = await loadTodos();
const todo = todos.find(t => t.id === Number(id));
if (!todo) {
console.log(`❌ 未找到 ID: ${id}`);
return;
}
todo.done = true;
await saveTodos(todos);
console.log(`🎉 已完成: ${todo.text}`);
}
export async function deleteTodo(id) {
const todos = await loadTodos();
const index = todos.findIndex(t => t.id === Number(id));
if (index === -1) {
console.log(`❌ 未找到 ID: ${id}`);
return;
}
const removed = todos.splice(index, 1)[0];
await saveTodos(todos);
console.log(`🗑️ 已删除: ${removed.text}`);
}
src/index.js:
import { addTodo, listTodos, completeTodo, deleteTodo } from './todo.js';
const [,, command, ...args] = process.argv;
async function main() {
switch (command) {
case 'add':
if (!args.length) {
console.log('用法: node src/index.js add <待办事项>');
break;
}
await addTodo(args.join(' '));
break;
case 'list':
await listTodos();
break;
case 'done':
await completeTodo(args[0]);
break;
case 'delete':
await deleteTodo(args[0]);
break;
default:
console.log('用法: node src/index.js <add|list|done|delete> [参数]');
}
}
main().catch(console.error);
# 添加 TODO
node src/index.js add "学习 Claude Code 安装"
# 输出:✅ 已添加: 学习 Claude Code 安装 (ID: 1748600000000)
node src/index.js add "完成第一个项目"
node src/index.js add "写 CLAUDE.md"
# 列出所有
node src/index.js list
# 📋 TODO 列表:
# ⬜ [1748600000000] 学习 Claude Code 安装
# ⬜ [1748600000001] 完成第一个项目
# ⬜ [1748600000002] 写 CLAUDE.md
# 完成 TODO
node src/index.js done 1748600000000
# 🎉 已完成: 学习 Claude Code 安装
# 删除 TODO
node src/index.js delete 1748600000002
# 🗑️ 已删除: 写 CLAUDE.md
在 Claude Code 会话中输入:
请为 todo.js 和 storage.js 编写 Vitest 单元测试,覆盖所有核心功能。
Claude 会生成测试文件并运行:
npx vitest run
# ✓ tests/storage.test.js (3 tests)
# ✓ tests/todo.test.js (5 tests)
#
# Tests 8 passed (8)
根据社区反馈和实际使用经验,以下是新手最常踩的十个坑:
症状:Claude 生成的代码风格不统一、不了解项目结构。
解法:进入项目后第一件事就是 /init 生成 CLAUDE.md。哪怕只有三行——技术栈、常用命令、项目结构——也胜过空白。
症状:到第 30 轮对话时,Claude 开始"遗忘"早期内容,Token 消耗暴增。
解法:每完成一个阶段性任务,执行 /compact。这会将对话历史压缩为摘要,释放上下文空间。
graph LR
A[新会话开始] --> B[阶段任务1]
B --> C["/compact 压缩"]
C --> D[阶段任务2]
D --> E["/compact 压缩"]
E --> F[阶段任务3]
style C fill:#fff9c4
style E fill:#fff9c4
症状:Claude 执行了 rm 或修改了不相关的文件。
解法:每次 Claude 请求执行命令时,花 5 秒阅读确认信息。特别关注: - 是否涉及删除操作 - 是否修改了非目标文件 - 命令参数是否合理
症状:问 Claude "什么是闭包"这类通用知识问题,浪费项目上下文。
解法:通用知识问 ChatGPT/浏览器,项目相关问题问 Claude Code。Claude Code 的优势在于理解你的代码库。
症状:在一个会话中修 Bug、加功能、重构代码,上下文混乱。
解法:一个任务一个会话。完成后 Ctrl+D 退出,新任务开新会话。可以通过 claude --continue 延续最近的会话。
症状:月底账单惊人。
解法:定期使用 /cost 查看消耗。学会使用 /compact 和短会话策略。Sonnet 模型性价比最高,日常开发优先用 Sonnet。
/cost
# Session cost: $0.42 (127K input tokens, 3.2K output tokens)
症状:Claude 生成的代码能跑但有隐藏问题(安全漏洞、边界情况未处理)。
解法:Claude 生成的代码是你的起点而非终点。养成审查习惯: - 检查输入验证 - 检查错误处理 - 检查安全敏感操作
症状:Claude 在 home 目录启动,扫描所有文件,消耗大量 Token。
解法:始终在项目根目录启动 claude。Claude Code 会读取当前目录及子目录的文件作为上下文。
# ❌ 错误
cd ~ && claude
# ✅ 正确
cd ~/projects/my-app && claude
症状:Claude 直接改代码,改完发现方向不对,又要回滚。
解法:复杂任务先进入 Plan 模式。Claude 会先分析并输出计划,你确认后再执行。在提示词中加入"先制定计划"或使用 EnterPlanMode 功能。
.gitignore症状:Claude 读取了 node_modules、dist、.env 等大文件/敏感文件,既浪费 Token 又有安全风险。
解法:项目根目录的 .gitignore 会自动被 Claude Code 尊重。确保它包含:
node_modules/
dist/
.env
.todos.json
*.log
请为 src/auth.js 添加 JWT 认证功能:
需求:
- 登录接口接收用户名和密码
- 验证成功后返回 JWT token
- token 有效期 24 小时
- 包含刷新 token 机制
约束:
- 使用 Node.js 内置 crypto 模块
- 不要引入额外依赖
- 添加错误处理
- 编写对应的单元测试
@src/index.js 这个文件中的路由配置有问题,
当访问 /api/unknown 时返回 500 而不是 404,
请修复并添加对应的测试。
使用 @ 符号可以引用特定文件,帮助 Claude 精确定位问题。
# 第一轮
请创建一个基本的 Express 服务器,包含健康检查接口
# 第二轮(在 Claude 完成后)
添加用户 CRUD 接口,使用内存数组暂存数据
# 第三轮
将数据存储从内存数组切换到 JSON 文件持久化
# 第四轮
为所有接口编写集成测试
这种渐进式方式比一次性描述所有需求更高效,每一步都可以验证。
flowchart TB
subgraph 准备阶段
A[安装 Node.js + npm] --> B[npm install -g @anthropic-ai/claude-code]
B --> C[配置认证:API Key 或 OAuth]
end
subgraph 项目初始化
C --> D[cd my-project && git init]
D --> E[claude 启动]
E --> F["/init 生成 CLAUDE.md"]
F --> G[审查并修改 CLAUDE.md]
end
subgraph 开发循环
G --> H[描述需求]
H --> I{Claude 生成方案}
I --> J[审查方案]
J -->|不满意| K[调整提示词]
K --> H
J -->|满意| L[确认代码变更]
L --> M[运行测试验证]
M -->|测试失败| N[告诉 Claude 修复]
N --> H
M -->|测试通过| O["/compact 压缩上下文"]
O --> P{还有新任务?}
P -->|有| H
P -->|无| Q["/cost 检查消耗"]
end
subgraph 收尾
Q --> R[git commit 提交]
R --> S[Ctrl+D 退出]
end
style A fill:#e3f2fd
style F fill:#fff3e0
style O fill:#e8f5e9
style R fill:#fce4ec
EACCES 权限错误# 原因:npm 全局目录权限不足
# 解法:使用 nvm 管理 Node.js,避免 sudo
nvm install 20
npm install -g @anthropic-ai/claude-code
# 检查网络连接
curl -I https://api.anthropic.com
# 如果在国内,需要配置代理
export HTTPS_PROXY=http://your-proxy:port
# 或使用国内 API 代理服务
export ANTHROPIC_BASE_URL=https://your-proxy.com/v1
检查你的 CLAUDE.md 是否包含: 1. 明确的技术栈版本 2. 具体的编码规范 3. 项目结构说明 4. "不要做"的清单(如"不要安装额外依赖")
# 1. 确认 CLI 可用
claude --version
# 2. 重新安装扩展
# VS Code → 扩展 → 搜索 Claude Code → 卸载 → 重装
# 3. 检查输出面板
# 查看 → 输出 → 选择 Claude Code 查看日志
完成本文教程后,建议按以下顺序深入学习:
graph TD
A[✅ 本文:入门安装与首个项目] --> B[Skill 开发实战]
A --> C[CLAUDE.md 六层配置]
A --> D[Token 成本优化]
B --> E[MCP 服务器开发]
C --> F[多 Agent 并行编排]
D --> G[CI/CD 自动化集成]
E --> H[企业级工具链构建]
| 路径 | 核心内容 | 预计学习时间 |
|---|---|---|
| Skill 开发 | 自定义能力扩展 | 2-3 小时 |
| 配置深度 | CLAUDE.md 高级配置 | 1-2 小时 |
| Token 优化 | 成本控制策略 | 1 小时 |
| MCP 开发 | 外部工具集成 | 3-4 小时 |
| Agent 编排 | 并行与自动化 | 2-3 小时 |
训练营适用性评估: - 适合类型:AI 编程工具入门训练营、企业内部 Claude Code 推广培训、高校 AI 辅助编程课程 - 教学时长:3-4 小时(含实操),可拆分为两次 2 小时课程 - 前置要求:基础命令行操作能力,了解任意一门编程语言 - 硬件要求:每人一台笔记本电脑,联网环境
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
