前言

npm pack @anthropic-ai/claude-code@2.1.88 --registry=https://registry.npmjs.org

在这里插入图片描述

在这里插入图片描述

从提供的文件列表来看这是一个使用 Bun 构建的项目,很可能将原始的 TypeScript(或 JavaScript)源代码打包成了一个可执行的 cli.js 文件,并附带源映射 cli.js.map。若要还原出原始代码,可以利用源映射文件反向提取出源码。
从你提供的文件列表来看,这是一个使用 Bun 构建的项目,很可能将原始的 TypeScript(或 JavaScript)源代码打包成了一个可执行的 cli.js 文件,并附带源映射 cli.js.map。若要还原出原始代码,可以利用源映射文件反向提取出源码。

1. 文件的作用

  • bun.lock – Bun 的依赖锁文件,记录了精确的依赖版本。
  • cli.js – 打包后的入口脚本,可能是编译后的 JavaScript,通常包含 #!/usr/bin/env bun 等可执行头。
  • cli.js.map – 源映射文件,记录了打包后代码与原始源代码之间的位置对应关系,有时会内嵌源码。
  • sdk-tools.d.ts – TypeScript 类型声明文件,可能用于对外暴露 SDK 的接口定义,本身不是实现代码。
  • vendor/ – 存放第三方依赖或编译后产物的目录,一般不是原始源码。
  • package.json / LICENSE.md / README.md – 项目配置文件、许可证和说明文档。

2. 还原原理

源映射(.map 文件)有两种常见形式:

  • 外部映射cli.js.map 文件包含 sources 字段,指向原始文件的路径(可能是相对路径),并可能包含 sourcesContent 字段,里面存放了原始源码的文本。
  • 内联映射cli.js 末尾会有 //# sourceMappingURL=data:application/json;base64,xxxx 这样的注释,将映射直接嵌入。

如果你的 cli.js.map 是完整的,且其中包含了 sourcesContent,那么就可以直接从中提取出所有原始源码。如果只有路径而没有内容,那么只能知道文件结构,但内容需要从原始文件系统获得(通常项目发布时会将源码一起打包在源映射中)。

3. 还原步骤

方法一:使用 Node.js 脚本提取

安装 source-map 库:

npm install source-map

创建一个脚本 extract.js

import fs from 'fs';
import path from 'path';
import sourceMap from 'source-map';

const mapFile = 'cli.js.map';
const outputDir = './restored-src';

// 读取源映射
const rawMap = JSON.parse(fs.readFileSync(mapFile, 'utf-8'));
const consumer = await new sourceMap.SourceMapConsumer(rawMap);

// 确保输出目录存在
if (!fs.existsSync(outputDir)) fs.mkdirSync(outputDir, { recursive: true });

// 获取所有源文件及其内容
const sources = consumer.sources;
for (const source of sources) {
  // 原始文件名
  const fileName = path.basename(source);
  const filePath = path.join(outputDir, fileName);
  
  // 尝试从 sourcesContent 中获取内容
  const content = consumer.sourceContentFor(source, true);
  if (content) {
    fs.writeFileSync(filePath, content, 'utf-8');
    console.log(`✅ 还原: ${source} -> ${filePath}`);
  } else {
    console.warn(`⚠️ 没有找到内容: ${source}`);
  }
}

consumer.destroy();

在这里插入图片描述

然后运行:

node extract.js

在这里插入图片描述

还原的源码会保存到 restored-src/ 目录中。

在这里插入图片描述

方法二:使用在线工具或命令行工具

  • source-map-visualization:部分在线工具支持上传 .map 文件并显示源码。
  • source-map CLI:可以通过安装 source-map 的全局命令行工具来提取,但编写脚本更灵活。

方法三:手动检查

如果你希望快速查看源码,可以直接用文本编辑器打开 cli.js.map,搜索 "sourcesContent" 关键字,如果有该字段,里面就是 Base64 编码或明文的源码,可以手动提取。但通常 sourcesContent 是数组,与 sources 一一对应。

4. 注意事项

  • 如果 sourcesContent 不存在,则无法从该文件还原源码,只能通过路径和调试信息推断文件结构。
  • 还原出的代码格式可能与原始代码略有差异(如缩进可能被压缩),但基本逻辑完整。
  • 如果项目使用了 bun build 并开启了 --sourcemap,通常 sourcesContent 是默认包含的(取决于配置)。你可以检查 cli.js.map 的内容确认。

5. 后续步骤

还原出源码后,你可以结合 package.json 中的依赖信息和 sdk-tools.d.ts 的类型定义来理解项目结构。如果还原的代码缺失了一些配置文件(如 tsconfig.json),可能需要手动创建以便继续开发。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐