本教程面向零基础读者,目标是用最短路径让 Claude Code 在你的终端里跑起来,并亲手产出一个能打开、能点击、能计时的真实交互网页——一个番茄工作法计时器。学完你将掌握:三种安装方式的选择、首次登录认证、settings.json 与 CLAUDE.md 的最小配置、以及如何用一句自然语言让 AI 把空文件夹变成完整项目。适用人群:从未用过命令行 AI 编程工具、想入门 AI 辅助开发的学生与转行开发者。
| 条目 | 要求 | 说明 |
|---|---|---|
| 操作系统 | macOS / Linux / Windows | Windows 推荐用 WSL2 或 Git Bash |
| 终端 | 能打开命令行 | macOS 自带 Terminal,Windows 用 PowerShell 或 WSL |
| Node.js | 可选,v18+ | 用 npm 安装方式时需要;用原生安装器则不需要 |
| 账号 | Anthropic 账号或 API Key | 用于认证计费 |
| 网络 | 能访问 Anthropic 服务 | 国内网络可能需要配置代理 |
💡 没装过 Node.js?没关系,本教程会先讲原生安装器,全程不碰 npm。
Claude Code 在 2026 年提供三种主流安装途径,按"省事程度"排序:
# 方式 A:原生安装器(推荐零基础,无需 Node.js)
# macOS / Linux / WSL
curl -fsSL https://claude.ai/install.sh | bash
# Windows PowerShell
irm https://claude.ai/install.ps1 | iex
# 方式 B:npm 全局安装(已装 Node.js 的开发者最常用)
npm install -g @anthropic-ai/claude-code
# 方式 C:IDE 扩展(VS Code / JetBrains 插件市场搜索 "Claude Code")
预期结果:终端输入 claude --version 能打印出版本号,例如 2.0.x,即代表安装成功。
常见问题:
- command not found: claude:环境变量未生效。原生安装器会写入 ~/.claude/local,请确认该目录在 PATH 中,或重启终端。
- npm: command not found:没装 Node.js,改用方式 A 原生安装器。
- EACCES permission denied:npm 全局目录权限问题,推荐改用 npm 前缀配置或直接换原生安装器。
在任意空目录打开终端,输入:
claude
首次运行会进入交互式认证流程,提供三种登录方式:
flowchart TD
A[运行 claude] --> B{选择认证方式}
B -->|1. 浏览器登录| C[自动打开浏览器]
C --> D[在 claude.ai 确认授权]
D --> E[终端回显 Login successful]
B -->|2. Anthropic API Key| F[粘贴 sk-ant- 开头密钥]
F --> G[写入本地凭据]
B -->|3. 企业 SSO| H[输入组织提供的登录链接]
H --> E
E --> I[进入交互式对话 REPL]
认证方式选择建议:
| 方式 | 适合谁 | 优点 | 注意 |
|---|---|---|---|
| 浏览器 OAuth 登录 | 个人订阅用户(Pro/Max) | 最省事,跟着引导点 | 需已登录 claude.ai |
| API Key | 用量计费 / 接入第三方 | 可控额度,可换供应商 | 密钥别提交到 git |
| 企业 SSO | 公司统一管理 | 合规、集中计费 | 需管理员提供链接 |
预期结果:认证成功后,终端会出现一个交互式输入框(REPL),光标闪烁等待你输入第一条指令。
常见问题:
- 浏览器没自动打开:复制终端里显示的 URL,手动粘贴到浏览器。
- 登录卡在白屏:检查网络代理设置,确认能访问 claude.ai。
- 额度查看:认证后输入 /cost 可查看本次会话消耗,或在控制台后台查看订阅额度。
Claude Code 的配置分三层,从全局到项目递进:
flowchart LR
U["用户全局<br/>~/.claude/settings.json"] --> P["项目级<br/>.claude/settings.json"]
P --> L["项目本地<br/>.claude/settings.local.json"]
L -.覆盖优先级递增.-> U
对于零基础,只需先动两个文件:全局 settings.json 和 项目 CLAUDE.md。
在终端运行一次,把允许的命令加入白名单,避免后续逐条放行:
# 让 claude 帮你打开配置编辑
claude config set --global preferredNotifPrompt false
或者手动编辑 ~/.claude/settings.json,一个最小可用模板:
{
"permissions": {
"allow": [
"Bash(ls:*)",
"Bash(cat:*)",
"Bash(mkdir:*)",
"Bash(node:*)",
"Bash(open:*)"
]
},
"model": "default"
}
permissions.allow数组里的命令后续执行不再弹确认框,只放你信任的只读或安全命令,写操作(如rm、git push)建议保持默认询问。
在项目根目录创建 CLAUDE.md,这是 Claude Code 的"长期记忆"。它会在每次对话开始时被自动读取。写一段简短说明即可:
# 项目说明
本项目是一个番茄工作法计时器网页应用(单文件 HTML)。
## 技术栈
- 原生 HTML5 / CSS3 / JavaScript(无框架、无构建工具)
- 单文件 index.html,双击即可在浏览器打开
## 约定
- 所有 UI 文案使用中文
- 配色:主色 #FF6347(番茄红),背景 #FFF8F0
- 代码注释用中文,变量名用英文
预期结果:之后每次在该目录运行 claude,AI 都会"记住"这些约定,生成的代码自动符合你的偏好。
mkdir ~/pomodoro && cd ~/pomodoro
claude
在 REPL 里粘贴下面这段提示词:
请在当前目录创建一个番茄工作法计时器的网页应用 index.html,要求:
1. 单文件,包含 HTML+CSS+JS,双击即可在浏览器打开
2. 顶部一个 25:00 的倒计时大字号显示
3. 三个按钮:开始、暂停、重置
4. 计时归零时弹窗提示"休息一下吧"
5. 下方记录今天完成的番茄数
6. 整体居中,番茄红主色,圆角卡片风格
请直接生成完整可运行的代码。
预期结果:Claude Code 会自动调用 Write 工具创建 index.html,并在终端显示文件创建进度。完成后你可以看到它简要说明做了什么。
# macOS
open index.html
# Linux
xdg-open index.html
# Windows
start index.html
浏览器里应出现一个居中的番茄红卡片,25:00 倒计时,三个按钮可点击。点"开始"开始倒计时,归零弹窗。
下面是 Claude Code 会帮你生成的 index.html 完整实现(也可作为验收参考):
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>番茄钟 · 专注计时器</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
background: #FFF8F0;
font-family: -apple-system, "PingFang SC", "Microsoft YaHei", sans-serif;
}
.card {
background: #fff;
border-radius: 24px;
padding: 48px 56px;
box-shadow: 0 12px 40px rgba(255, 99, 71, 0.18);
text-align: center;
}
.title { color: #FF6347; font-size: 22px; margin-bottom: 24px; }
.timer {
font-size: 96px;
font-weight: 700;
color: #333;
letter-spacing: 4px;
margin-bottom: 32px;
font-variant-numeric: tabular-nums;
}
.btns { display: flex; gap: 16px; justify-content: center; margin-bottom: 28px; }
button {
padding: 12px 28px;
border: none;
border-radius: 12px;
font-size: 16px;
cursor: pointer;
transition: transform .15s, opacity .15s;
}
button:active { transform: scale(0.96); }
.btn-start { background: #FF6347; color: #fff; }
.btn-pause { background: #FFD180; color: #5d4037; }
.btn-reset { background: #ECEFF1; color: #455A64; }
.btn-start:disabled, .btn-pause:disabled { opacity: .4; cursor: not-allowed; }
.count { color: #888; font-size: 15px; }
.count b { color: #FF6347; font-size: 20px; }
</style>
</head>
<body>
<div class="card">
<div class="title">🍅 番茄工作法计时器</div>
<div class="timer" id="timer">25:00</div>
<div class="btns">
<button class="btn-start" id="start">开始</button>
<button class="btn-pause" id="pause" disabled>暂停</button>
<button class="btn-reset" id="reset">重置</button>
</div>
<div class="count">今天已完成 <b id="done">0</b> 个番茄</div>
</div>
<script>
const TOTAL = 25 * 60; // 番茄时长:25 分钟(秒)
let remain = TOTAL;
let intervalId = null;
let done = 0;
const timerEl = document.getElementById('timer');
const doneEl = document.getElementById('done');
const startBtn = document.getElementById('start');
const pauseBtn = document.getElementById('pause');
const resetBtn = document.getElementById('reset');
// 把秒数格式化成 mm:ss
function fmt(sec) {
const m = String(Math.floor(sec / 60)).padStart(2, '0');
const s = String(sec % 60).padStart(2, '0');
return `${m}:${s}`;
}
function render() { timerEl.textContent = fmt(remain); }
function tick() {
remain--;
render();
if (remain <= 0) {
clearInterval(intervalId);
intervalId = null;
done++;
doneEl.textContent = done;
remain = TOTAL;
render();
startBtn.disabled = false;
pauseBtn.disabled = true;
alert('休息一下吧 🍵');
}
}
startBtn.onclick = () => {
if (intervalId) return;
intervalId = setInterval(tick, 1000);
startBtn.disabled = true;
pauseBtn.disabled = false;
};
pauseBtn.onclick = () => {
clearInterval(intervalId);
intervalId = null;
startBtn.disabled = false;
pauseBtn.disabled = true;
};
resetBtn.onclick = () => {
clearInterval(intervalId);
intervalId = null;
remain = TOTAL;
render();
startBtn.disabled = false;
pauseBtn.disabled = true;
};
render();
</script>
</body>
</html>
index.html 浏览器打开,显示 25:00TOTAL 临时改成 3,验证归零弹窗与番茄数 +1回到 Claude Code,用一句话继续让它增强:
给番茄钟增加:
1. 工作 25 分钟和休息 5 分钟自动切换,循环往复
2. 顶部进度条显示当前番茄的剩余比例
3. 把"今天完成的番茄数"用 localStorage 持久化,刷新不丢
这正是 Claude Code 的核心价值:用自然语言持续迭代一个真实项目,而不是每次从零写代码。
flowchart TD
A[1. 安装 claude<br/>原生安装器/npm] --> B[2. 终端运行 claude<br/>完成认证]
B --> C[3. 写 CLAUDE.md<br/>告诉 AI 项目约定]
C --> D[4. 输入自然语言需求<br/>一句话建项目]
D --> E[5. Claude 自动创建文件<br/>index.html]
E --> F[6. 浏览器打开验收]
F --> G{满意?}
G -->|否| H[再用一句话提需求迭代]
H --> F
G -->|是| I[🎉 第一个 AI 辅助项目完成]
code.claude.com/docs/en/quickstart,权威的第一手安装与上手指南code.claude.com/docs/en/cli-reference,所有命令与参数完整清单settings.json 精细控制 AI 能执行哪些命令| 维度 | 评估 |
|---|---|
| 适合训练营类型 | AI 编程入门营、前端零基础启蒙营、转行开发者速成营 |
| 学员基础要求 | 能打开终端即可,无编程基础友好 |
| 建议教学时长 | 1.5 小时:安装认证 30 分钟 + 配置讲解 20 分钟 + 实战造番茄钟 40 分钟 |
| 学员产出 | 每人一个可分享的番茄钟网页,成就感强 |
| 衔接下一课 | 可自然过渡到"多文件项目""MCP 工具""自动化钩子"等进阶主题 |
| 注意事项 | 课堂需提前测试网络对 Anthropic 服务的可达性;备好代理方案 |
[!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 等场景全覆盖。
