Files
claude-code/docs/outline-output/user/01-installation.md
2026-06-15 16:51:29 +08:00

211 lines
9.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 第一章:从零开始 —— 安装、首次启动与环境要求
> 把工具装到本机,跑通第一次对话。
## 我需要先装什么Bun 与 Node.js 的取舍
这一份 Claude Code反编译重建版下面统一叫 CCB有两种运行形态对应两套前置依赖。**普通使用者只需要 Node.js**:通过 npm 装好 `ccb` 命令后,`ccb` 默认就是用 Node.js 跑的(`package.json` 里的 `"ccb": "dist/cli-node.js"`。Node.js 用 18 或更新的版本即可,没有特别严格的版本要求。
如果你打算从源码克隆、改代码、跑测试或调试,那需要装 Bun。源码模式对 Bun 版本有硬性要求:`package.json``engines.bun` 字段写明 `>=1.3.0`,安装文档进一步建议 `bun upgrade` 升到最新,老版本会触发一些奇怪的 BUG路径解析、热重载偶发失败等。装 Bun 的方式:
```bash
# Linux / macOS
curl -fsSL https://bun.sh/install | bash
# Windows (PowerShell)
powershell -c "irm bun.sh/install.ps1 | iex"
```
为什么要同时支持两个运行时?源码构建出的产物是同一份 JS`dist/cli.js` 加几百个 chunk 文件),两个 shebang 入口只是把它喂给不同的解释器:
- `dist/cli-bun.js` 头部是 `#!/usr/bin/env bun`,启动快、内存占用低(`--version` RSS 大约 35MB
- `dist/cli-node.js` 头部是 `#!/usr/bin/env node`,兼容性更好,不依赖 Bun
`build.ts` 末尾会自动生成这两个入口,所以你不用纠结——装好哪个运行时就调对应那个命令即可。
## 三种安装方式npm 全局、源码 dev、构建产物
### 方式一npm 全局安装(最常用)
一行命令搞定,适合只想把工具用起来的人:
```sh
npm i -g claude-code-best
ccb --version # 应输出类似 2.7.0 (Claude Code)
```
装完后会得到三个全局命令:`ccb`Node 形态,默认推荐)、`ccb-bun`Bun 形态,启动更快)、`claude-code-best`(与 `ccb` 等价的别名)。日常调用用 `ccb` 就行;如果你的机器装了 Bun 且追求更冷启动,可以试 `ccb-bun`
更新到最新版的命令是:
```sh
ccb update
```
> 不推荐 `bun i -g claude-code-best`bun 全局安装在部分平台有路径冲突。如果一定要用 bun先跑 `bun pm -g trust claude-code-best @claude-code-best/mcp-chrome-bridge` 解除信任限制。
### 方式二:源码 dev 模式(贡献者/想折腾的人)
需要 Bun ≥ 1.3.0
```bash
git clone https://github.com/claude-code-best/claude-code.git
cd claude-code
bun install
bun run dev
```
`bun run dev` 实际执行的是 `scripts/dev.ts`:它通过 `bun -d MACRO.X:Y` 把版本号等常量在启动时注入,再通过 `--feature <name>``DEFAULT_BUILD_FEATURES` 列表里的功能开关逐个打开。也就是说dev 模式默认启用全部功能,最贴近"完整体验"。
带调试器启动:
```bash
BUN_INSPECT=9229 bun run dev:inspect
```
`BUN_INSPECT` 环境变量被 `scripts/dev.ts` 读取后会自动加上 `--inspect-wait=9229`,浏览器或 VS Code 连上 `chrome://inspect` 即可断点调试。
一次性管道调用:
```bash
echo "say hello" | bun run src/entrypoints/cli.tsx -p
```
### 方式三:构建产物
把源码编出 `dist/` 目录,之后既可以用 bun 也可以用 node 跑:
```bash
bun run build # 默认走 Bun.build输出 dist/cli.js + chunks/
# 或
bun run build:vite # 备选 Vite 链chunk 体积更小
node dist/cli.js --version
```
`build.ts` 做了四件事:用 `Bun.build` 切分代码(`splitting: true`),把 `import.meta.require` 改写成 Node 兼容版本,给第三方依赖里 `var { x } = globalThis.Bun` 这类解构加 `typeof` 守卫,再把 `vendor/audio-capture/``src/utils/vendor/ripgrep/` 拷到 `dist/vendor/` 下。
## 第一次启动会发生什么trust dialog、init 流程
进入任意项目目录后启动:
```bash
cd my-project
ccb
```
第一次(或换了新目录)会依次经过这几个阶段:
**1. 信任对话框Trust Dialog**
弹出一个红框问你 "Is this a project you trust?",下面列出当前目录绝对路径,选项只有两个:
- `Yes, I trust this folder` —— 把"已信任"标记写到当前项目的 `.claude/settings.json``hasTrustDialogAccepted: true`),之后这个目录不再询问
- `No, exit` —— 直接退出,进程返回码 1
这一步不是仪式感的它真在守门在用户确认信任之前CLAUDE.md 预读、系统上下文预取、MCP server 拉起等副作用统统不会跑。`src/main.tsx` 里通过 `checkHasTrustDialogAccepted()` 判断,未信任时只 prefetch 安全内容。源码在 `src/components/TrustDialog/TrustDialog.tsx`
**2. 初始化init**
信任通过后,`src/entrypoints/init.ts``init()` 接管。它会:启用配置系统(`enableConfigs`)、应用 `.claude/settings.json` 里的环境变量(先应用"安全"子集,再在信任后应用全集)、配置代理与 mTLS、初始化 Sentry 与 Langfuse没配 key 就是 no-op、对 Anthropic API 做 TCP+TLS 预连接(重叠 100~200ms 握手时间)。`init()``lodash-es/memoize` 包了一层,整个进程只会跑一次。
**3. 进入 REPL**
最后渲染欢迎框:
```
╭─────────────────────────────────────────────╮
│ ✻ Welcome to Claude Code Best │
│ /help for commands, ctrl+c to exit │
╰─────────────────────────────────────────────╯
>
```
第一次还没配 API 的话,发任何消息都会被引导去 `/login` 配置 Provider见第二章
## 快速路径命令一览
`src/entrypoints/cli.tsx``main()` 按优先级串了十几条"快速路径",意图是让某些子命令几乎零模块加载就返回,避免动辄加载几 MB 代码。
最常用、最快的就是看版本:
```bash
ccb --version
# 或
ccb -v
```
`cli.tsx` 第 80 行的判断只匹配参数数量为 1 且就是 `--version` / `-v` / `-V`,命中后直接 `console.log` MACRO 里编译期注入的版本号就 return**完全不加载任何其他模块**。版本号的单一来源是 `package.json``scripts/defines.ts``getMacroDefines()` 读它注入 `MACRO.VERSION`),避免多处写死产生漂移。
其他快速路径包括:
```bash
ccb --dump-system-prompt # 输出渲染后的系统提示feature-gated外部构建会被 DCE 掉)
ccb --computer-use-mcp # 启动 Computer Use MCP server 模式
ccb --chrome-native-host # Chrome native messaging host 模式
ccb remote-control # Bridge / Remote Control 模式(也叫 rc / remote / sync / bridge
ccb daemon start # Daemon 长驻模式
ccb ps / logs / attach / kill # 后台会话管理
ccb --resume # 恢复上次会话
ccb -c # 继续当前目录最近一次会话
```
完整子命令列表在 `src/main.tsx`Commander.js 注册),想看自己关心的命令用法:
```bash
ccb --help
ccb mcp --help
ccb doctor --help
```
## 把 `ccb` 设为全局命令:`cli-bun.js` 与 `cli-node.js` 双入口
如果走 npm 全局安装,`ccb` 命令已经自动注册好。如果走源码模式想让全局也能直接调,可以手动把 `dist/cli-bun.js``dist/cli-node.js` 软链到 PATH 里。两个入口内容极简:
```js
// dist/cli-bun.js
#!/usr/bin/env bun
import "./cli.js"
// dist/cli-node.js
#!/usr/bin/env node
import "./cli.js"
```
实际逻辑都在 `dist/cli.js`(以及几百个按需加载的 chunk。两个入口只是换运行时`build.ts` 最后用 `chmodSync(path, 0o755)` 给它们加了可执行位。
选哪个?机器装了 Bun 就用 `cli-bun.js`(启动更快、内存占用更低,`--version` 的 RSS 实测从 966MB 降到 35MB没装或不想装就用 `cli-node.js`(兼容性更好)。注意 `package.json` 里的 `"bin"` 字段默认把 `ccb` 指向 `dist/cli-node.js`——也就是说普通用户拿到的是 Node 版本,想用 Bun 版本要么显式调 `ccb-bun`,要么自己改 bin。
## 环境自检:`ccb doctor`
`ccb doctor`(在 `src/main.tsx` 第 5282 行注册)是一个独立的健康检查子命令,会跳过信任对话框、跳过启动 `setup()`,专门用来诊断安装状态。它渲染的是 `src/screens/Doctor.tsx`,列出:
- 当前版本号、npm 上最新版本与稳定版本(通过 `getNpmDistTags()` 拉取)
- 安装类型(`native` 还是 npm 全局)
- 当前生效的设置文件路径与解析错误
- MCP server 连接状态、agent 定义加载情况
- 沙箱状态(`SandboxDoctorSection`
- 文件锁状态(`getAllLockInfo``cleanupStaleLocks`
跑一次:
```bash
ccb doctor
```
它的描述里有句重要警告:"The workspace trust dialog is skipped and stdio servers from .mcp.json are spawned for health checks. Only use this command in directories you trust."信任对话框被跳过stdio 类 MCP server 会被拉起做检查,**只在信任的目录里跑**)。
升级到最新版:
```bash
ccb update
```
`ccb update` 对应 `src/cli/updateCCB.ts`:先看当前是不是 bun 装的(看 `process.execPath` 是不是落在 bun 的全局路径),是的话用 `bun update -g`,否则用 `npm install -g`
## 下一步
- 想配 APIAnthropic / OpenAI 兼容 / Gemini / Grok / 国产大模型),看 [第二章:让 Claude 听你的 —— 配置 Provider 与模型](./02-providers.md)
- 想直接发消息、看流式回复、切权限模式,看 [第三章:日常对话 —— 交互式 REPL 怎么用](./03-repl.md)
- 想知道有哪些 slash 命令、按场景找,看 [第四章slash 命令速查](./04-slash-commands.md)