mcpField
S
source-maps-debugging

source-maps-debugging

github.com/marius-townhouse开发643 次安装38 周前更新
代码仓库

关于 source-maps-debugging

这项 TypeScript 调试技能介绍如何配置编译器和构建工具的源映射,帮助开发者调试原始 TypeScript 文件,并选择适合开发与生产环境的方案。

主要功能

  1. 01配置 TypeScript 源映射
  2. 02在构建工具中设置映射
  3. 03通过断点调试 .ts 文件
  4. 04选择生产环境映射策略
  5. 05验证映射和堆栈信息

适用场景

  1. 01在浏览器或 Node.js 中调试 TypeScript
  2. 02修复 .ts 文件中的断点失效
  3. 03让堆栈信息指向 TypeScript 源码

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/marius-townhouse/effective-typescript-skills --skill source-maps-debugging

安装后在 Claude Code 中输入/source-maps-debugging确认已加载。

详细介绍

使用 Source Maps 调试 TypeScript

概述

Source Maps 搭起了 TypeScript 源代码与实际运行的编译后 JavaScript 之间的桥梁。它们可以让调试器显示原始 TypeScript 代码、在 .ts 文件中设置断点,并提供有意义的堆栈跟踪。没有 Source Maps 时,你只能调试编译后的 JavaScript,这既令人沮丧,也容易出错。

正确配置 Source Maps 对高效调试 TypeScript 应用至关重要。

何时使用此技能

  • 在浏览器或 Node.js 中调试 TypeScript
  • 配置构建工具(webpack、vite、rollup)
  • 堆栈跟踪显示编译后的 JavaScript
  • TypeScript 文件中的断点不起作用
  • 配置生产构建

铁律

在开发环境中启用 Source Maps 以便调试。可考虑在生产环境中使用单独的 Source Maps 来报告错误,同时保持较小的打包体积。

检测

留意以下调试问题:

// Stack trace shows compiled JavaScript:
Error: Something went wrong
    at Object.<anonymous> (app.js:42:15)
    at Module._compile (internal/modules/cjs/loader.js:1137:30)

// Should show TypeScript:
Error: Something went wrong
    at fetchUser (api.ts:15:10)
    at async loadData (app.ts:42:5)

启用 Source Maps

TypeScript 编译器
// tsconfig.json
{
  "compilerOptions": {
    "sourceMap": true,        // Generate .js.map files
    "inlineSourceMap": false, // Don't inline (for development)
    "inlineSources": false,   // Include source in map
    "sourceRoot": "/",        // Root for source paths
    "mapRoot": "/"            // Root for map paths
  }
}
构建工具
// webpack.config.js
module.exports = {
  devtool: 'source-map',  // or 'eval-source-map' for faster builds
};

// vite.config.ts
export default {
  build: {
    sourcemap: true,
  },
};

// rollup.config.js
export default {
  output: {
    sourcemap: true,
  },
  plugins: [typescript({ sourceMap: true })],
};

Source Map 选项

选项使用场景构建速度质量
source-map生产环境慢最佳
eval-source-map开发环境快良好
inline-source-map单个文件中等良好
hidden-source-map生产环境(错误报告)慢最佳
nosources-source-map生产环境(不含代码)慢仅堆栈跟踪

生产环境注意事项

// webpack.config.js - different for dev/prod
module.exports = (env) => ({
  devtool: env.production 
    ? 'hidden-source-map'  // Separate file, not referenced
    : 'eval-source-map',   // Fast, good for development
});

将 Source Maps 上传到错误报告服务:

// Sentry example
Sentry.init({
  dsn: 'your-dsn',
  release: process.env.RELEASE,
  // Source maps uploaded separately
});

验证 Source Maps

# Check if source map was generated
ls dist/*.js.map

# Inspect source map content
npx source-map-explorer dist/app.js

# Test in browser DevTools
# 1. Open DevTools
# 2. Go to Sources tab
# 3. Look for original .ts files
# 4. Set breakpoint in TypeScript

抗压协议

配置 Source Maps 时:

  1. 在开发环境中启用:这是调试的必要条件
  2. 选择生产环境策略:隐藏、无源码或不使用
  3. 测试断点:确认它们在 TypeScript 文件中有效
  4. 检查堆栈跟踪:应显示 .ts 文件和行号
  5. 监控打包体积:Source Maps 可能很大

危险信号

症状问题解决方案
.ts 中的断点不起作用未加载 Source Maps在构建配置中启用
堆栈跟踪显示 .js未生成 Source Maps检查 tsconfig/构建工具
行号错误Source Maps 已过期重新构建生成
打包体积过大使用了内联 Source Maps使用单独的文件

常见借口

“Source Maps 会拖慢构建速度”

实际情况:开发时使用 eval-source-map 来提高速度。只有生产构建才使用完整的 Source Maps。

“我不需要它们,我能看懂 JS”

实际情况:调试经过类型、async/await 转换等处理的编译后 JS 很痛苦。Source Maps 能节省数小时。

“它们会暴露我的源代码”

实际情况:生产环境使用 hidden-source-map 或 nosources-source-map。只将它们上传到错误报告服务。

快速参考

环境建议选项备注
开发环境eval-source-map快速重建
生产环境 + 调试source-map质量最佳
生产环境 + 错误报告hidden-source-map上传到服务
生产环境(最精简)nosources-source-map仅堆栈跟踪

总结

启用 Source Maps 来调试 TypeScript。开发时使用快速选项,生产环境可考虑使用隐藏或无源码选项。它们能显著简化调试。

参考资料

  • Dan Vanderkam 所著《Effective TypeScript》第 2 版
  • 条目 73:使用 Source Maps 调试 TypeScript

评论

支持 Markdown