这个目录记录了从 @anthropic-ai/claude-code 发布包反推源码和重建 external CLI 的过程。
当前状态:
- 已通过
reverse-sourcemap还原出cli/ - external 工作区已经整理为
package/cli(包含 vendor-deps、node_modules、构建脚本) - 已生成可执行产物
package/dist/cli.external.js auto-mode defaults输出已和官方cli.js对齐
npm i @anthropic-ai/claude-code
cp node_modules/@anthropic-ai/claude-code/cli.js .
cp node_modules/@anthropic-ai/claude-code/cli.js.map .
npm install --global reverse-sourcemap
reverse-sourcemap -o cli -v cli.js.mappackage/cli/: 归一化后的 external workspace(src、vendor、vendor-deps、node_modules、package.json、bun.lock)package/dist/cli.external.js: 当前重建产物package/dist/cli.external.js.map: 对应 sourcemappackage/vendor/: 需要保留的 native/vendor 源- 根目录
cli.js/cli.js.map: 官方发布包原始文件
External workspace 已经包含完整的 package.json / bun.lock,直接在目录内安装即可:
cd package/cli
bun install --frozen-lockfile如需重新校准依赖,可结合 cli.js.map 和 node_modules 自行审计并更新 package/cli/package.json。
所有构建脚本都写在 package/cli/package.json 里,通过 Bun 运行:
cd package/cli
bun run build:external # 单次构建
bun run build:external:watch # watch 模式底层命令等价于:
bun build src/entrypoints/cli.tsx \
--outdir ../dist \
--entry-naming cli.external.js \
--target node \
--format esm \
--sourcemap=linked \
--minify \
--banner '#!/usr/bin/env node'node dist/cli.external.js --version
node dist/cli.external.js --help
node dist/cli.external.js auto-mode defaults官方产物对比:
node cli.js auto-mode defaults
node dist/cli.external.js auto-mode defaults- external 构建入口应走
src/entrypoints/cli.tsx,不能直接打main.tsx - 公开版 Commander 对
-d2e不兼容,重建脚本里做了 argv 归一化 auto_mode_system_prompt.txt和permissions_external.txt不在磁盘源码里,而是内嵌在官方cli.js中;重建脚本会自动提取它们
-
准备环境
- Node.js ≥ 18、npm ≥ 10
- Bun(
build-external.mjs走bun build) - macOS 如果要跑系统集成代码,需要允许访问
defaults等 CLI
-
拉依赖
cd package node analyze-external-deps.mjs # 确认 manifest 完整 npm install --ignore-scripts --no-audit --no-fund
-
开发/调试构建
cd package/cli bun run build:external -- --no-minify # 可传递额外 bun build flag node ../dist/cli.external.js --help
- 修改
package/cli/**后直接重复bun run build:external - Feature/Env/Macro 相关常量现在直接写在源码里(不再依赖单独 profile 文件)
- 修改
-
本地验证
node dist/cli.external.js --version node dist/cli.external.js auto-mode defaults node dist/cli.external.js --help
与官方二进制对比:
diff <(node cli.js auto-mode defaults) \ <(node dist/cli.external.js auto-mode defaults)
-
出包
cd package node build-external.mjs \ --out dist/claude-code-cli.js \ --version 2.1.88 \ --build-time "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \ --package-url @anthropic-ai/claude-code cp package.external.json package.json npm pack
- 发布前务必运行
node build-external.mjs --check - 如需生成 sourcemap,保持
externalBundleProfile.sourcemap = 'linked'
- 发布前务必运行
