
本文详解如何通过正确的 Source Map 配置实现 JavaScript 到 TypeScript 源码的可靠逆向映射,重点解决 reverse-sourcemap 工具报错“Not all sources were included in the sourcemap”的根本原因与实操方案。
本文详解如何通过正确的 source map 配置实现 javascript 到 typescript 源码的可靠逆向映射,重点解决 `reverse-sourcemap` 工具报错“not all sources were included in the sourcemap”的根本原因与实操方案。
TypeScript 编译生成的 .js 文件本身不可逆——它只是目标代码,不包含原始结构信息。真正支持“逆向还原”的关键并非 JS 本身,而是配套的 Source Map(源映射)文件(通常为 .js.map)。但能否成功还原,取决于 Source Map 的生成模式与内容完整性。
? Source Map 两种核心模式
TypeScript(tsc)支持两种 Source Map 输出方式,其差异直接影响逆向能力:
| 类型 | 特点 | 是否含源码 | 适用场景 | tsc 配置 |
|---|---|---|---|---|
| inlineSourceMap: true(或 sourceMap: true + inlineSources: true) | 将源码内联嵌入 .map 文件中,.js 文件末尾含完整 Base64 编码的源码 | ✅ 是 | ✅ 支持完整逆向还原(推荐) | "inlineSources": true |
| sourceMap: true(默认) | 仅记录位置映射(line/column → 源文件路径),不包含实际源码内容 | ❌ 否 | 仅支持调试器跳转,无法脱离原始项目还原代码 | "inlineSources": false(默认) |
你遇到的 reverse-sourcemap 报错 "Not all sources were included in the sourcemap",正是因使用了不含源码的普通 Source Map——工具试图读取缺失的源文件内容,自然失败。
✅ 正确配置:启用内联源码的 Source Map
在 tsconfig.json 中明确启用内联源码:
完整的Galileo AI平台 TypeScript/JS SDK 参考,用于评估、观察和保护 GenAI 应用。适用于构建 Node.js 或 TypeScript 项目。
{
"compilerOptions": {
"target": "ES2020",
"module": "commonjs",
"sourceMap": true,
"inlineSources": true, // ? 关键!将 TS 源码直接嵌入 .map 文件
"inlineSourceMap": false // 与 sourceMap + inlineSources 互斥,保持 false
}
}
执行 tsc 后,生成的 .js.map 文件将包含 "sourcesContent" 字段,其值为原始 .ts 文件的字符串数组(已 Base64 编码),例如:
{
"version": 3,
"sources": ["src/index.ts"],
"sourcesContent": ["export const hello = () => 'Hello World';\n"],
"mappings": "AAAA,IAAI,GAAG, ..."
}
✅ 此时,任何支持 sourcesContent 的逆向工具(如 source-map-explorer、sourcemap-validator 或自定义脚本)均可完整还原原始 TypeScript 代码。
⚠️ 注意事项与替代方案
- reverse-sourcemap 已过时:该包发布于 2017 年,不兼容现代 Source Map v3 格式及 sourcesContent 字段,不建议继续使用。
-
推荐替代工具:
- source-map-cli(官方维护 CLI)
- 自定义 Node.js 脚本(基于 source-map 库解析 sourcesContent)
- 安全提醒:生产环境切勿部署含 inlineSources 的 Source Map——它会暴露全部源码,构成严重安全风险。仅在开发/调试阶段启用。
- 验证是否生效:打开生成的 .js.map 文件,搜索 "sourcesContent";若存在且非空数组,则配置成功。
总结:逆向还原的本质是“映射+源码”,缺一不可。确保 tsconfig.json 启用 inlineSources: true,即可获得可逆向的完整 Source Map;放弃过时工具,选用现代、标准的解析方案,才能稳定、准确地还原 TypeScript 原始逻辑。










