首页 › tutorials › Claude Code对话开发入门:安装到首项目交付

Claude Code对话式开发入门:从安装到首项目交付

概述

本教程面向从未使用过 Claude Code 的开发者,系统讲解对话式AI编程的核心思维、安装配置、基础操作和首个项目交付。学完你将掌握:独立安装和配置 Claude Code、理解对话式开发的心智模型、用自然语言驱动代码编写和调试、完成一个可运行的 CLI 工具项目。预计学习时间 4-6 小时。

前置条件

第一章:理解对话式开发

1.1 Claude Code 是什么

Claude Code 是 Anthropic 官方的 AI 编程助手,直接运行在你的终端中。它与 Cursor、GitHub Copilot 的核心区别在于:

特性 Claude Code Cursor Copilot
运行环境 原生终端 VS Code 分支 IDE 插件
交互方式 自然语言对话 Tab 补全 + 聊天 行内补全
文件感知 全项目读写 当前窗口 当前文件
工具调用 Bash/Read/Write/Grep/Glob 内置 有限
自主性 可自主规划执行 半自动 被动补全

Claude Code 不是"代码补全工具",而是一个对话式开发伙伴。你用自然语言描述需求,它理解项目上下文,自主读取文件、编写代码、运行命令、修复错误。

1.2 对话式开发的心智模型

传统开发的思维路径:

需求 → 分析 → 设计算法 → 编写代码 → 调试 → 测试

对话式开发的思维路径:

需求 → 用自然语言描述给 Claude → 审查结果 → 迭代优化

关键转变:你从代码编写者变为意图表达者和质量审查者。你的核心技能从"写代码"转向"准确描述需求"和"评估代码质量"。

flowchart LR
    A[你的意图] -->|自然语言| B[Claude Code]
    B -->|读取| C[项目文件]
    B -->|执行| D[终端命令]
    B -->|生成| E[代码输出]
    E -->|审查| F{满意?}
    F -->|否| A
    F -->|是| G[提交代码]

    style A fill:#4A90D9,color:#fff
    style B fill:#D97706,color:#fff
    style G fill:#059669,color:#fff

第二章:安装 Claude Code

2.1 三种安装方式

Claude Code 在 2026 年提供三种安装方式,按推荐顺序排列:

方式一:原生安装(Native Install)—— 推荐

# macOS / Linux
curl -fsSL https://claude.ai/install.sh | sh

# Windows(PowerShell 管理员模式)
irm https://claude.ai/install.ps1 | iex

原生安装不依赖 Node.js,二进制文件直接编译,启动更快,兼容性最好。

方式二:Homebrew(macOS 专用)

brew install claude-code

适合已使用 Homebrew 管理包的 macOS 用户,更新方便(brew upgrade claude-code)。

方式三:npm 安装(全平台通用)

npm install -g @anthropic-ai/claude-code

需要 Node.js v18+。适合没有原生包管理器或需要特定版本的场景。

2.2 验证安装

claude --version
# 预期输出:Claude Code v2.1.x 或更高版本

2.3 认证方式

启动 Claude Code 后会引导你完成认证。有两种方式:

方式 A:账户登录(推荐新手)

claude
# 首次启动会打开浏览器,登录 Anthropic 账户
# 免费 Plan:$5 免费额度
# Pro Plan:$20/月,更高额度
# Max Plan:$100-200/月,最高额度和模型访问

方式 B:API Key

export ANTHROPIC_API_KEY="sk-ant-xxxxx"
claude
# 直接使用 API Key 认证,按 token 计费

2.4 常见安装问题

问题 解决方案
command not found: claude 检查 PATH 是否包含安装目录,或重新打开终端
EACCES: permission denied npm 安装时加 --prefix ~/.local,或使用原生安装
Node.js 版本过低 nvm install 20 && nvm use 20 升级到 v20 LTS
Windows 上 WSL2 报错 确保 WSL2 已更新:wsl --update
macOS Gatekeeper 阻止 系统设置 → 隐私与安全性 → 允许运行

第三章:首次对话

3.1 启动交互式会话

cd ~/projects        # 进入你的项目目录(或任何空目录)
claude               # 启动交互式会话

你会看到 Claude Code 的交互式界面,左侧是对话区,底部是输入框。

3.2 第一条命令

在输入框中输入:

> 你好,请帮我看看当前目录下有什么文件

Claude Code 会调用工具来查看目录内容:

我来查看当前目录的内容。

[Bash] ls -la /home/user/projects

输出:
total 8
drwxr-xr-x  2 user user 4096 May 26 10:00 .
drwxr-xr-x 18 user user 4096 May 25 09:30 ..

当前目录是空的。你想要创建什么项目?

3.3 核心斜杠命令

在交互式会话中,以下斜杠命令是你的"瑞士军刀":

命令 功能 使用场景
/help 显示所有可用命令 随时查看
/clear 清除当前对话上下文 话题切换时
/compact 压缩对话历史,释放上下文空间 长对话中途
/model 切换模型(Opus/Sonnet/Haiku) 按需选择速度/质量
/permissions 管理工具权限 控制安全边界
/cost 显示当前会话费用 成本监控
/quit 或 Ctrl+C 退出会话 结束工作

3.4 理解工具权限系统

Claude Code 每次执行操作前会请求你的许可。首次运行时你会看到:

Claude wants to read file: package.json
[Allow / Deny / Always allow for this project]

三个选项的含义: - Allow:本次允许,下次同样操作仍会询问 - Deny:拒绝本次操作 - Always allow:对当前项目永久允许此类操作

建议新手策略:前三天全部手动 Allow,熟悉 Claude Code 的行为模式后再批量授权。

3.5 模型选择指南

Claude Code 支持三种模型,各有适用场景:

flowchart TD
    A[选择模型] --> B{任务复杂度?}
    B -->|简单查询/快速修改| C[Haiku<br/>最快最便宜]
    B -->|日常开发/中等任务| D[Sonnet<br/>速度与质量平衡]
    B -->|架构设计/复杂重构| E[Opus<br/>最强推理能力]

    style C fill:#059669,color:#fff
    style D fill:#D97706,color:#fff
    style E fill:#7C3AED,color:#fff
模型 速度 成本 最佳场景
Haiku 最快 最低 格式化、简单查询、快速修复
Sonnet 中等 中等 日常编码、功能开发、调试
Opus 较慢 最高 架构设计、复杂重构、代码审查

新手建议:默认使用 Sonnet,遇到困难问题时切换到 Opus。

第四章:五大核心工具

Claude Code 通过五大工具与你的项目交互。理解这些工具,你就理解了 Claude Code 的能力边界。

4.1 Read —— 读取文件

> 请看看 src/index.js 的内容

Claude Code 调用 Read 工具读取文件,然后分析内容。它一次能读取约 2000 行,超出部分会分段读取。

4.2 Write/Edit —— 创建和编辑文件

> 请创建一个 README.md,内容是项目说明

Claude Code 会生成文件内容并调用 Write 工具创建文件。对于已存在的文件,使用 Edit 工具进行精确修改。

4.3 Bash —— 执行终端命令

> 运行 npm test 看看测试是否通过

Claude Code 通过 Bash 工具执行命令。这是最需要关注安全性的工具——它会请求你的许可后才执行。

4.4 Glob —— 按模式搜索文件

> 项目里有哪些 TypeScript 文件?

Claude Code 使用 Glob 按模式匹配查找文件,如 **/*.ts。

4.5 Grep —— 按内容搜索文件

> 哪些文件引用了 express 模块?

Claude Code 使用 Grep 搜索文件内容,支持正则表达式。

flowchart TB
    subgraph "Claude Code 五大工具"
        A[Read<br/>读取文件内容]
        B[Write/Edit<br/>创建/修改文件]
        C[Bash<br/>执行终端命令]
        D[Glob<br/>按模式搜索文件名]
        E[Grep<br/>按内容搜索文件]
    end

    subgraph "你的项目"
        F[源代码文件]
        G[配置文件]
        H[测试文件]
        I[终端/Shell]
    end

    A --> F
    A --> G
    B --> F
    B --> G
    B --> H
    C --> I
    D --> F
    E --> F

    style A fill:#4A90D9,color:#fff
    style B fill:#059669,color:#fff
    style C fill:#D97706,color:#fff
    style D fill:#7C3AED,color:#fff
    style E fill:#DC2626,color:#fff

第五章:CLAUDE.md —— 项目的持久记忆

5.1 为什么需要 CLAUDE.md

每次启动新会话,Claude Code 默认不记得你的项目偏好。CLAUDE.md 是一个 Markdown 文件,告诉 Claude Code 你的项目规则、技术栈、编码风格等。

5.2 五层 CLAUDE.md 体系

flowchart BT
    A["~/.claude/CLAUDE.md<br/>全局规则<br/>所有项目生效"] --> B["项目根/CLAUDE.md<br/>项目级规则<br/>团队共享"]
    B --> C["项目根/.claude/CLAUDE.md<br/>同上,放 .claude 目录"]
    C --> D["子目录/CLAUDE.md<br/>模块级规则"]
    D --> E["~/.claude/CLAUDE.local.md<br/>个人本地规则<br/>不提交到 Git"]

    style A fill:#DC2626,color:#fff
    style B fill:#D97706,color:#fff
    style C fill:#D97706,color:#fff
    style D fill:#4A90D9,color:#fff
    style E fill:#059669,color:#fff

5.3 新手 CLAUDE.md 模板

在项目根目录创建 CLAUDE.md:

# 项目说明
这是一个 [项目名称],使用 [技术栈]。

# 开发规则
- 使用 TypeScript strict 模式
- 代码注释使用英文
- 提交信息格式:feat/fix/docs: 简短描述

# 常用命令
- 启动开发:npm run dev
- 运行测试:npm test
- 构建项目:npm run build

# 注意事项
- 不要修改 .env 文件
- 测试覆盖率不低于 80%

5.4 CLAUDE.md 生效验证

在会话中输入:

> 请描述一下当前项目的规则和约束

Claude Code 会读取 CLAUDE.md 并复述其中的规则。如果回复正确,说明配置生效。

第六章:实战项目 —— 构建命令行笔记工具

现在我们来构建一个完整的 CLI 工具,体验从零到交付的全过程。

6.1 需求描述

构建一个名为 quicknote 的命令行笔记工具,功能: - 添加笔记:quicknote add "今天学到了对话式开发" - 列出笔记:quicknote list - 搜索笔记:quicknote search "对话式" - 删除笔记:quicknote delete 3 - 笔记存储在 ~/.quicknote/notes.json

6.2 初始化项目

mkdir quicknote && cd quicknote
git init
claude

在 Claude Code 会话中输入:

> 我想创建一个命令行笔记工具 quicknote。使用 Node.js 和 TypeScript。
> 功能包括:add、list、search、delete 四个子命令。
> 笔记存储在 ~/.quicknote/notes.json,每条笔记有 id、内容、创建时间。
> 请帮我初始化项目结构,创建 package.json 和 tsconfig.json。

Claude Code 会执行以下操作: 1. 运行 npm init -y 创建 package.json 2. 安装 TypeScript 和相关依赖 3. 创建 tsconfig.json 4. 搭建基础目录结构

6.3 编写核心逻辑

继续在会话中输入:

> 请实现 quicknote 的核心功能。入口文件是 src/index.ts。
> 使用 commander 库处理命令行参数,用 chalk 给输出加颜色。

Claude Code 生成的代码结构如下:

quicknote/
├── src/
│   ├── index.ts        # 入口,命令行解析
│   ├── store.ts        # 数据存储层
│   └── types.ts        # 类型定义
├── package.json
├── tsconfig.json
└── CLAUDE.md

src/types.ts:

export interface Note {
  id: number;
  content: string;
  createdAt: string;
}

src/store.ts:

import * as fs from 'fs';
import * as path from 'path';
import { Note } from './types';

const NOTES_DIR = path.join(process.env.HOME || '~', '.quicknote');
const NOTES_FILE = path.join(NOTES_DIR, 'notes.json');

function ensureFile(): void {
  if (!fs.existsSync(NOTES_DIR)) {
    fs.mkdirSync(NOTES_DIR, { recursive: true });
  }
  if (!fs.existsSync(NOTES_FILE)) {
    fs.writeFileSync(NOTES_FILE, JSON.stringify([], null, 2));
  }
}

export function loadNotes(): Note[] {
  ensureFile();
  const data = fs.readFileSync(NOTES_FILE, 'utf-8');
  return JSON.parse(data);
}

export function saveNotes(notes: Note[]): void {
  ensureFile();
  fs.writeFileSync(NOTES_FILE, JSON.stringify(notes, null, 2));
}

export function addNote(content: string): Note {
  const notes = loadNotes();
  const note: Note = {
    id: notes.length > 0 ? Math.max(...notes.map(n => n.id)) + 1 : 1,
    content,
    createdAt: new Date().toISOString(),
  };
  notes.push(note);
  saveNotes(notes);
  return note;
}

export function searchNotes(keyword: string): Note[] {
  return loadNotes().filter(n =>
    n.content.toLowerCase().includes(keyword.toLowerCase())
  );
}

export function deleteNote(id: number): boolean {
  const notes = loadNotes();
  const index = notes.findIndex(n => n.id === id);
  if (index === -1) return false;
  notes.splice(index, 1);
  saveNotes(notes);
  return true;
}

src/index.ts:

#!/usr/bin/env node
import { Command } from 'commander';
import chalk from 'chalk';
import { addNote, loadNotes, searchNotes, deleteNote } from './store';

const program = new Command();

program
  .name('quicknote')
  .description('一个简单的命令行笔记工具')
  .version('1.0.0');

program
  .command('add <content>')
  .description('添加一条笔记')
  .action((content: string) => {
    const note = addNote(content);
    console.log(chalk.green(`✓ 笔记已添加 [${note.id}] ${note.content}`));
  });

program
  .command('list')
  .description('列出所有笔记')
  .action(() => {
    const notes = loadNotes();
    if (notes.length === 0) {
      console.log(chalk.yellow('暂无笔记'));
      return;
    }
    notes.forEach(note => {
      const time = new Date(note.createdAt).toLocaleString('zh-CN');
      console.log(
        chalk.blue(`[${note.id}]`) + ` ${note.content} ` +
        chalk.gray(time)
      );
    });
  });

program
  .command('search <keyword>')
  .description('搜索笔记')
  .action((keyword: string) => {
    const results = searchNotes(keyword);
    if (results.length === 0) {
      console.log(chalk.yellow(`未找到包含 "${keyword}" 的笔记`));
      return;
    }
    results.forEach(note => {
      console.log(chalk.blue(`[${note.id}]`) + ` ${note.content}`);
    });
  });

program
  .command('delete <id>')
  .description('删除指定ID的笔记')
  .action((id: string) => {
    const success = deleteNote(parseInt(id, 10));
    if (success) {
      console.log(chalk.green(`✓ 笔记 [${id}] 已删除`));
    } else {
      console.log(chalk.red(`✗ 未找到笔记 [${id}]`));
    }
  });

program.parse();

6.4 配置运行

> 请更新 package.json,添加 bin 字段和 build 脚本,
> 然后运行 npm run build 验证编译通过。

Claude Code 会更新 package.json:

{
  "name": "quicknote",
  "version": "1.0.0",
  "bin": {
    "quicknote": "./dist/index.js"
  },
  "scripts": {
    "build": "tsc",
    "dev": "ts-node src/index.ts"
  },
  "dependencies": {
    "commander": "^12.0.0",
    "chalk": "^5.3.0"
  },
  "devDependencies": {
    "typescript": "^5.4.0",
    "@types/node": "^20.0.0",
    "ts-node": "^10.9.0"
  }
}

6.5 测试运行

> 请用 npm link 安装到全局,然后运行 quicknote add "我的第一条笔记" 测试功能。
> 接着运行 quicknote list 确认笔记已保存。

预期输出:

✓ 笔记已添加 [1] 我的第一条笔记

[1] 我的第一条笔记 2026/5/26 14:30:00

6.6 添加单元测试

> 请为 store.ts 添加单元测试。使用 vitest 框架。
> 测试覆盖:添加笔记、列出笔记、搜索笔记、删除笔记四个场景。

Claude Code 会创建 src/__tests__/store.test.ts:

import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import * as fs from 'fs';
import * as path from 'path';
import { addNote, loadNotes, searchNotes, deleteNote } from '../store';

const NOTES_FILE = path.join(
  process.env.HOME || '~', '.quicknote', 'notes.json'
);

describe('Store', () => {
  beforeEach(() => {
    if (fs.existsSync(NOTES_FILE)) {
      fs.unlinkSync(NOTES_FILE);
    }
  });

  it('should add a note', () => {
    const note = addNote('测试笔记');
    expect(note.id).toBe(1);
    expect(note.content).toBe('测试笔记');
    expect(note.createdAt).toBeDefined();
  });

  it('should list all notes', () => {
    addNote('笔记A');
    addNote('笔记B');
    const notes = loadNotes();
    expect(notes).toHaveLength(2);
  });

  it('should search notes by keyword', () => {
    addNote('学习 TypeScript');
    addNote('学习 React');
    addNote('做饭');
    const results = searchNotes('学习');
    expect(results).toHaveLength(2);
  });

  it('should delete a note by id', () => {
    addNote('待删除');
    addNote('保留');
    const deleted = deleteNote(1);
    expect(deleted).toBe(true);
    expect(loadNotes()).toHaveLength(1);
  });

  it('should return false for non-existent id', () => {
    const deleted = deleteNote(999);
    expect(deleted).toBe(false);
  });
});

6.7 运行测试

> 请运行测试,确保全部通过。如果失败请修复。
> npm test

 ✓ src/__tests__/store.test.ts (5)
   ✓ Store > should add a note
   ✓ Store > should list all notes
   ✓ Store > should search notes by keyword
   ✓ Store > should delete a note by id
   ✓ Store > should return false for non-existent id

 Test Files  1 passed (1)
 Tests       5 passed (5)

6.8 完整工作流程图

flowchart TD
    A["1. mkdir quicknote && cd quicknote"] --> B["2. git init"]
    B --> C["3. claude 启动会话"]
    C --> D["4. 描述需求:初始化项目"]
    D --> E["5. Claude 创建 package.json"]
    E --> F["6. 描述需求:实现核心功能"]
    F --> G["7. Claude 编写 store.ts + index.ts"]
    G --> H["8. 描述需求:添加测试"]
    H --> I["9. Claude 创建 store.test.ts"]
    I --> J["10. npm test 验证"]
    J --> K{测试通过?}
    K -->|是| L["11. npm link 全局安装"]
    K -->|否| M["12. 让 Claude 修复"]
    M --> J
    L --> N["13. 实际测试 quicknote 命令"]
    N --> O["✓ 项目交付完成"]

    style C fill:#D97706,color:#fff
    style O fill:#059669,color:#fff

第七章:会话管理

7.1 恢复之前的会话

关闭终端后,你可以恢复之前的对话:

# 继续最近的会话
claude --continue

# 恢复指定会话
claude --resume abc123

# 查看历史会话
claude --sessions

7.2 上下文管理

Claude Code 的上下文窗口有限(约 200K tokens)。长对话中你会看到:

Context window usage: 85%. Consider using /compact.

此时使用 /compact 命令压缩对话历史。Claude Code 会保留关键信息,丢弃冗余细节。

7.3 一次性命令(非交互模式)

对于简单的单次查询,使用 -p 标志:

# 查询式使用
claude -p "这个项目的依赖有哪些"

# 管道输入
cat error.log | claude -p "分析这个错误日志的原因"

第八章:十个常见新手错误

错误 1:指令太模糊

# 不好
> 优化一下代码

# 好的
> 请把 src/utils.ts 中的 formatDate 函数重构为纯函数,
> 去除对全局变量 timezone 的依赖,改为参数传入。

原则:具体说明文件、函数、期望行为。

错误 2:一次要求太多

# 不好
> 帮我实现用户注册、登录、权限管理、个人资料编辑全部功能

# 好的
> 先实现用户注册功能,包含表单验证和密码加密

原则:拆分为小步骤,逐步推进。

错误 3:不审查直接接受

Claude Code 生成的代码可能有逻辑错误或安全问题。始终审查关键代码。

错误 4:忽略 CLAUDE.md

没有 CLAUDE.md,每次新会话 Claude Code 都要从零了解你的项目。花 10 分钟写好 CLAUDE.md,后面省 10 小时。

错误 5:盲目 Always Allow

前三天建议逐条 Allow。了解 Claude Code 会执行哪些操作后,再对安全的操作类型使用 Always Allow。

错误 6:不使用 Git

Claude Code 会修改文件。频繁提交让你随时可以回退:

git add -A && git commit -m "feat: 添加笔记存储功能"

错误 7:在敏感目录启动

不要在包含 .env、密钥文件的目录中启动 Claude Code。使用 .gitignore 和 .claudeignore 排除敏感文件。

错误 8:忽视费用

使用 /cost 定期检查费用。Opus 模型的成本是 Sonnet 的 5 倍、Haiku 的 25 倍。

错误 9:不了解 Plan 模式

对复杂任务,先进入 Plan 模式让 Claude Code 规划方案:

> 请进入 Plan 模式,分析重构数据库层的方案,不要直接修改代码

Plan 模式下 Claude Code 只读取和分析,不修改文件,适合规划和审查阶段。

错误 10:不利用上下文引用

用 @文件名 直接引用文件,让 Claude Code 精确知道你要讨论什么:

> 请看看 @src/store.ts 的 addNote 函数,有一个边界条件没有处理

第九章:对话式开发工作流模板

以下是一个标准的功能开发工作流,适用于大多数项目:

sequenceDiagram
    participant Dev as 开发者
    participant CC as Claude Code
    participant Git as Git 仓库
    participant FS as 文件系统

    Dev->>CC: 描述功能需求
    CC->>FS: 读取相关文件
    CC->>CC: 规划实现方案
    CC->>Dev: 展示计划(Plan 模式)
    Dev->>CC: 确认方案
    CC->>FS: 创建/修改文件
    CC->>Dev: 展示改动
    Dev->>CC: 运行测试
    CC->>FS: npm test
    CC->>Dev: 测试结果
    Dev->>Git: git commit
    Dev->>CC: 下一个需求...

对话式开发的黄金法则:

  1. 描述清楚 —— 越具体越好
  2. 小步迭代 —— 一次一个功能
  3. 审查代码 —— 你是最终的质量守门人
  4. 善用 Git —— 随时可以回退
  5. 保持对话聚焦 —— 一个会话一个主题

延伸阅读

训练营适用性评估

维度 评估
适合训练营类型 AI编程入门营、全栈开发训练营第一课、企业数字化转型培训
教学时长 4-6 小时(含实操)
学员基础要求 会使用终端和 Git,了解任一编程语言基础
实操设备要求 每人一台笔记本(macOS/Linux/WSL2),可联网
课程密度 高——从安装到交付一个完整项目
建议分组 2-3 人一组,互相审查 Claude Code 生成的代码

参考来源

  1. Quickstart - Claude Code Docs — 官方安装和快速入门指南
  2. Claude Code Best Practices — 官方最佳实践文档
  3. Claude Code Tutorial for Beginners 2026 — 社区入门教程
  4. 15 Claude Code Best Practices from 6 Projects — 实战经验总结
  5. 30 Claude Code Tips and Tricks — 1500+小时使用经验

[!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 等场景全覆盖。

51学通信知识星球海报-扫码加入