
简介claude-code-main.zip 是一份围绕 claude 项目的完整源码压缩包面向 Web 前端、TypeScript 及全栈开发者适合希望阅读真实中型项目源码、梳理模块划分与组件封装方式的读者。压缩包共 1903 个文件以 1332 个 ts 和 552 个 tsx 为主体覆盖核心逻辑、类型定义与 React 组件层另含 18 个 js 脚本用于构建、工具或运行配置以及 1 个 md 文档便于快速了解项目背景与使用入口。整体包体约 9.43MB结构清晰可按目录层次定位入口、状态管理、界面组件与辅助工具模块是学习 TypeScript 工程化、抽象封装及大型前端项目代码组织的参考样本。当前已有 245 人学习下载适合需要在真实源码语境中提升代码阅读能力或基于 claude 进行二次开发的开发者。1. claude-code 的 main 分支源码包先看懂再动手claude-code 的 main 分支源码包和你在 npm 上装的anthropic-ai/claude-code不是同一个东西。我过去也犯过这个错拿到claude-code-main.zip以为解压完就能跑结果发现里面是一整套 TypeScript 工程连可执行文件都要自己 build。这份 zip 的价值恰恰在这里它把 Claude Code 的黑匣子打开了你能看到 CLI 怎么解析参数、怎么把 prompt 打包成 API 请求、怎么处理权限确认。适合谁想离线安装、想二次开发、或者单纯想搞清楚工具内部机制的开发者。如果你只想要一个能用的命令行助手直接npm install -g anthropic-ai/claude-code更快但想控制版本、改造行为源码包是唯一的路。2. 源码包拆解monorepo 结构、入口文件与 cli/sdk 调用链拿到 zip 第一件事不是解压而是想清楚你手里是什么。GitHub 上任意仓库的 main 分支 zip 包本质是仓库在某个 commit 上的快照不携带完整.git历史。Claude Code 的仓库是 monorepo 布局核心代码集中在cli/目录可编程接口在sdk/目录根目录的package.json只是 workspace 聚合声明。如果你解压后直接翻根目录会以为项目就一个壳真正的入口藏在cli/里。下面按我实际排查的顺序拆一遍你照着走一次就能把目录结构和调用关系摸清。2.1 根目录与 package.jsonbin 字段才是真正的入口先解压看顶层结构unzip claude-code-main.zip -d claude-code-main cd claude-code-main ls -la cat package.json | head -60unzip -d指定解压目录避免 zip 里的文件散落到当前目录。ls看顶层有哪些目录cat看根package.json的头部。这里要注意如果根package.json里有workspaces字段说明这是 npm workspace 的 monorepo所有子包共享一个node_modules在根目录直接npm install会把cli/、sdk/的依赖一起装上磁盘占用不小但省心。真正决定命令名的是cli/package.json里的bin字段{ name: anthropic-ai/claude-code, bin: { claude: ./cli.js } }bin的含义是当这个包被全局安装或被npm link时npm 会在 PATH 里创建一个名为claude的软链指向./cli.js。所以你在终端敲claude实际执行的是cli.js这个 Node 脚本。这个细节在源码安装时非常关键如果只node cli.js跑不会产生claude命令只有npm link或npm install -g .之后claude才存在。参数说明name是包名后面全局安装时要和它对应bin是命令映射表键是终端命令名值是相对包根目录的脚本路径。排查命令不存在问题时先看这个字段是否被正确注册比瞎改 PATH 高效得多。2.2 cli、sdk、agent 三层结构命令是怎么一路走到 API 的继续往里走我一般会先看cli/和sdk/下的目录划分。Claude Code 在 2.x 之后把能力拆成了 CLI 和 SDK 两层cli/负责终端交互、参数解析、权限管理sdk/提供可编程接口让你在 Node 脚本里直接调用 Claude Code 的能力而不需要起一个交互式终端。ls cli/ ls sdk/ find cli/src -maxdepth 1 -type d | sortfind的-maxdepth 1限制只查一层避免把node_modules也扫进来。从目录名基本能看出职责边界有负责参数解析的有负责会话管理的有负责工具调用的。整个调用链可以概括为你在终端输入claude 解释这段代码CLI 层先做参数解析把文本拼进系统提示词再组装成 Anthropic API 的 messages 结构通过流式接口发给模型模型返回工具调用请求由 CLI 层在本机执行比如读文件、改代码最后把结果回传给模型继续生成。理解这条链路的意义在于排错。比如报错说工具执行失败你要知道这是 CLI 层在本地跑命令和 API 无关报错说stream disconnected则是请求链路中断问题出在 API 响应阶段。sdk/目录里能看到封装好的 query 函数它绕过了终端 UI直接走同一套消息组装逻辑所以 SDK 模式和 CLI 模式的模型行为一致只是少了交互层。这个设计决定了后面第 5 章的自动化脚本能成立。2.3 构建产物与本地链接npm link 做了什么源码包里的 TypeScript 代码不能直接被 Node 执行需要先构建。常见的构建命令是npm run build产物输出到dist/。如果你打开cli.js发现里面有require(./dist/...)说明入口文件只是壳真正的实现在构建产物里。cd cli npm run build ls -la dist/ | head -20build脚本在cli/package.json的scripts字段里定义不同版本可能叫build或compile以你手里这份 zip 为准。构建完先别急着全局安装先在本地验证产物能跑node cli.js --version这一步如果输出版本号说明构建链路是通的。之后再npm link把当前目录注册成全局命令npm link which claudenpm link做的事情是把当前包的bin字段映射到全局node_modules/.bin/下再软链到 PATH 里。所以npm link之后which claude应该能查到路径。如果你在 Windows 上操作npm link生成的软链在 cmd 和 PowerShell 下都能识别但cli.js开头的#!/usr/bin/env nodeshebang 在 Windows 下由 npm 的 shim 处理不要手动双击运行cli.jsmacOS/Linux 下则相反构建产物需要有执行权限才能直接跑必要时chmod x cli.js。另外注意zip 包解压后根目录会有package-lock.json这是锁定依赖版本的清单。我一般用npm ci而不是npm install因为 ci 会严格按 lockfile 安装不会自动升级依赖保证构建环境可复现。这一节先提到这第 3 章会专门展开这个命令的细节。3. 从 zip 到可用 CLI解压、构建、鉴权与冒烟测试这一章是落地核心。整个流程按顺序走解压 → 确认环境 → 装依赖 → 构建 → 注册命令 → 配鉴权 → 冒烟测试。每一步都有对应的验证点不要跳步骤。我踩过的坑里有一半是因为跳过了环境确认直接跑安装命令后面排错反而花了几倍时间。3.1 解压与版本确认先核对 node 版本和 lockfileClaude Code 的代码基于现代 Node 特性比如 ESM、顶层 await、可选链对 Node 版本有硬性要求。常见做法是要求 Node.js 18 及以上推荐 20 LTS。先确认你手里的环境node -v npm -v unzip claude-code-main.zip -d claude-code-main cd claude-code-main head -30 package-lock.jsonnode -v和npm -v分别输出 Node 和 npm 版本号unzip解压head -30 package-lock.json查看 lockfile 头部。package-lock.json开头有lockfileVersion字段如果是 3对应 npm 7如果你npm -v显示的是 6说明 npm 版本太老读不了新格式的 lockfile后续npm ci会直接报错。如果你像我一样同时维护多个 Node 项目建议用 nvm 切到项目要求的版本再操作避免系统全局 Node 版本干扰别的项目。zip 解压后先看一眼目录名是不是带-main后缀带的话说明这个包是从 GitHub main 分支打的快照不是 release 包后面升级时要按第 4 章第 5 条的方式处理。3.2 安装依赖与构建npm ci 与 build 脚本进入cli/目录安装依赖。monorepo 情况下根目录也有依赖我倾向于先装根目录再装子包如果你只关心 CLI直接在cli/里操作也能跑但注意cli的依赖里可能引用 workspace 内的sdk需要先构建sdk才能让 cli 的 require 找到对应模块。cd cli npm ci npm run build为什么用npm ci而不是npm install因为ci会先删除现有node_modules再按 lockfile 精确安装构建结果可复现install则会尝试更新依赖可能引入和 lockfile 不一致的版本。第一次跑 build 可能比较慢因为要编译大量 TypeScript 文件期间控制台会滚动输出编译进度看到报错先别慌往下翻找到第一条 error 才是根因。build 结束后确认产物ls -la dist/ | head -10 node cli.js --version此时如果cli.js依赖dist产物且node cli.js --version能正常打印版本号说明构建成功。常见的失败是dist目录没生成或者cli.js里 require 的路径不对此时回去看tsconfig.json的outDir配置确认构建输出路径和cli.js引用路径一致。参数说明npm ci要求 lockfile 存在没有 lockfile 会直接报错npm run build实际执行的是cli/package.json的scripts字段里 build 对应的命令不同版本可能不同以你手里的 zip 为准。构建失败先看错误日志绝大多数是依赖缺失或 Node 版本过老少数是内存不足可以NODE_OPTIONS--max-old-space-size4096 npm run build加大内存上限再试。3.3 注册命令与首次鉴权API Key 的两种配置方式构建完成后把命令注册到全局npm link claude --version如果claude --version输出和node cli.js --version一致说明链接成功。接下来是鉴权。Claude Code 需要 Anthropic API Key有环境变量和配置文件两种方式export ANTHROPIC_API_KEYsk-ant-xxxx claude --print 你好环境变量方式适合临时使用和 CI 场景配置文件方式适合长期使用内容放到项目目录的.claude/settings.json或用户级配置里。注意变量名API Key 对应ANTHROPIC_API_KEY如果是团队统一走 OAuth 登录方式才会涉及ANTHROPIC_AUTH_TOKEN两者不要混。Anthropic 的 Key 通常以sk-ant-开头这是肉眼判断配置是否写错的最快方法。如果claude启动后提示没有 key检查环境变量是否在当前终端会话导出过或者配置文件里是否存在。export在不同 shell 环境下不持久重启终端就失效这点经常被忽略不想每次手动导的话在.bashrc或.zshrc里加一行 export 即可。3.4 冒烟测试用 --print 验证整条链路交互式终端不好自动化验证我一般用--print参数做冒烟测试。这个参数让 Claude Code 执行一次请求后直接打印结果并退出不进入交互模式claude --print 用一句话说明 TCP 三次握手如果这条命令能输出一句正常的话说明鉴权、API 通信、模型调用整条链路都是通的。如果报权限类错误多半是 key 无效或额度问题如果报网络超时先确认当前网络环境能正常访问 Anthropic API再检查 DNS 和出口网络是否稳定这种问题通常和环境有关多试几次就能区分开。--print还有几个实用子参数比如--output-format指定输出格式我通常配合用来做脚本化测试claude --print 列出当前目录文件名 --output-format json参数说明--print适合单轮问答和 CI 冒烟测试--output-format json会把结果包成 JSON 返回方便后续用 jq 等工具解析。注意--print模式默认不带权限确认所以不要让它执行有副作用的命令比如删除文件或推送代码。如果你要在 CI 里跑还要加上后面避坑章节里提到的权限跳过参数否则进程会卡住。4. 避坑笔记claude-code 源码安装的五个典型翻车现场这一章直接复用我踩过的坑按现象 → 原因 → 解决整理。如果你是从零开始装建议把这章当作 check list 过一遍能省掉大半排错时间。每条都来自实际操作不是臆测。4.1 安装期npm ci 报错提示 lockfile 版本不兼容现象在cli/目录执行npm cinpm 直接报ERESOLVE或EBADENGINE甚至提示lockfileVersion不匹配。原因系统 npm 版本太旧读不了新格式的package-lock.json或者 Node 版本低于仓库要求某些依赖的 install 脚本直接拒绝执行。解决先用nvm install 20装 LTS再用nvm use 20激活。确认node -v和npm -v匹配后删除node_modules重新执行npm ci。如果 npm 版本还是不对用npm install -g npm10升级 npm再跑 ci。注意不要手动改 lockfile改错一个版本号后面会连环报错宁可删干净重装。4.2 安装期npm link 之后 command not found现象npm link没有报错但新开一个终端敲claude提示command not found。原因npm link软链的是当前 shell 的 PATH但新终端没有重新加载 PATH或者 npm 的全局 bin 目录不在系统 PATH 里。macOS 上偶尔还会因为权限问题导致软链没生效。解决先which claude看能不能找到找不到就跑npm prefix -g把输出的目录加到 PATH。macOS 如果加了还是不行检查/usr/local/bin或~/.npm-global是否有写权限必要时用chmod修复。最省事的兜底方案是不依赖 PATH直接用 node 的绝对路径跑cli.js但日常使用体验会差很多不建议长期这么干。4.3 运行期invalid x-api-key 与沉默的鉴权失败现象claude --print启动后没有正常输出报 HTTP 401提示x-api-keyheader 无效。原因最常见是环境变量名写错很多人把ANTHROPIC_API_KEY记成ANTHROPIC_KEY或OPENAI_API_KEY也有可能是export只在当前会话有效新终端里 key 不存在。解决echo $ANTHROPIC_API_KEY确认变量存在且以sk-ant-开头不想每次 export 的话在 shell 配置文件里加 export 行。如果 key 正确仍报 401检查 key 是否过期或没有对应模型的访问权限换个有效 key 再试。注意别把 key 硬编码提交到 git.gitignore里把.env加上。4.4 运行期无 TTY 环境下 --print 卡住不动现象在 CI 脚本或后台进程里执行claude --print进程一直挂起没有输出也没有退出。原因Claude Code 默认检测终端类型在非 TTY无交互终端环境下会等待交互输入或者权限确认流程因为没有 TTY 而等待用户按 Enter。解决用--print时显式加--dangerously-skip-permissions跳过权限确认并确保输入来自管道或--print参数。这个参数有危险只建议在 CI 或受控环境用。另外一个常见陷阱是--print模式下不要用重定向把输出文件覆盖到项目目录里容易把源码搞乱输出到/tmp或独立目录更安全。4.5 维护期zip 快照与 git 主干的版本漂移现象按这份 zip 装好后发现和线上 npm 版本功能对不上部分参数不存在。原因zip 是某个 commit 的快照npm 上发布的是打包后的版本两者发布时间不同步。main 分支的代码可能带了未发布的改动也可能落后于已发布 hotfix。解决想跟踪最新代码就别用 zip 快照用git clone --depth 1拉主干想稳定使用就用npm install -g anthropic-ai/claude-code。zip 包适合定版阅读或离线传输不适合作为长期升级来源。我一般把 zip 对应的 commit hash 记下来写在安装说明里方便后续回溯版本差异。5. 把 Claude Code 当 SDK 用一段脚本批量审代码如果你已经跑通命令行下一步值得折腾的是把 Claude Code 塞进自己的脚本里。cli/目录构建后会打包出 SDK 入口你可以在自己的 Node 项目里直接引用不经过交互终端这样就能做批量代码审查一类的事。先在你的项目里注册依赖npm install anthropic-ai/claude-code然后在脚本里用 SDK 的query方法// review.js const { query } require(anthropic-ai/claude-code/sdk); async function review(file) { const result await query( review this file for bugs and security issues: file, { cwd: process.cwd(), permissionMode: acceptEdits, maxTokens: 4096 } ); return result; } const files process.argv.slice(2); for (const f of files) { const r await review(f); console.log(--- ${f} ---); console.log(r.text); }参数说明query是 SDK 的核心方法第一个参数是 prompt第二个参数是选项对象。cwd指定工作目录permissionMode控制工具调用权限acceptEdits表示允许修改文件不想让脚本改动代码就改成plan。maxTokens控制单次回答上限。跑的时候注意每个文件都会发起一次模型调用消耗的是你 API Key 的额度批量之前先用两个文件验证。验证脚本是否生效我习惯加一行计时time node review.js src/index.js src/utils.js如果有异常SDK 的报错比 CLI 更直接一般是抛异常而不是挂终端。把所有文件 review 完再决定哪些改动进 PR。从那以后我每次接到不熟悉的代码库都先建一个二十行的 review 脚本跑一遍再决定要不要深入。这套流程对手上的claude-code-main.zip同样适用先把命令行跑通再按需上 SDK。希望帮到你。本文还有配套的精品资源点击获取