使用 source maps 和 webpack 调试 typescript

Debugging typescript with source maps and webpack

我有一个用 Typescript 编写的项目,我希望能够调试它(在 Chrome Dev ToolsIntellij 中)。

起初我看到不支持 Typescript 的 import 功能。所以我尝试使用 Webpackwebpack dev server 但这完全失败了。即使我的应用程序正在运行(由于只有一个包含所有代码的 bundle.js 文件),它也无法将代码与给定的源映射匹配,这使得调试变得不可能。

在我停止使用 webpack 后,我尝试添加 require.js 作为依赖项来解决我遇到的 require is not defined 错误。那行得通,但现在我再次陷入困境并得到这个:

Uncaught ReferenceError: exports is not defined

我不知道为什么这不起作用。我想让我的应用程序工作(通过 webpack 或能够在转译后解析导入语句)并且仍然能够使用 typescript 生成的源映射来调试代码。我怎样才能做到这一点?

我附上了我的配置文件,以防万一那里缺少什么:

tsconfig.json

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es6",
    "sourceMap": true
  },
  "include": [
    "scripts/**/*"
  ],
  "exclude": [
    "node_modules"
  ]
}

webpack.config.js:

module.exports = {
    resolve: {
        extensions: [/*'.ts', '.tsx', */'.js']
    },
    entry: './scripts/main.js',
    output: {
        path: '/',
        filename: 'app.js'
    },
    module: {
        rules: [
            { test: /\.js$/, loader: 'source-map-loader', enforce: 'pre' }
        ],
        loaders: [
            { test: /\.tsx?$/, loader: 'ts-loader', exclude: /node_modules/ },
            {test: /\.css$/, loader: "style!css"}
        ]
    },
    watch: true
};

要启用 webpack 调试,请将 devtool: "source-map" 添加到您的 webpack.config.js

要使用 require.js 加载文件,请在 tsconfig.json 中更改 "module": "amd"require.js 不支持加载 commonjs 个模块。

我要post 在这里回答。这个答案可能适合你(见第5步)。因人而异。经过这么多天的研究,来自 GitHub 的 robin-a-meade 的 post 是成功的。

在开始之前,主要问题似乎在于 VS 代码调试配置文件内部的源映射 URL,以及它(VS 代码)如何查看应用程序。这独立于您正在使用的任何后端堆栈(例如 Express、.NET Core、Django 等)。您唯一需要注意的是,当您的应用程序为 运行.

时,Google Chrome 成功加载生成的源映射

已用:

  • Visual Studio 代码版本 1.13.1
  • 节点 7.4.0
  • Windows 10 个 64 位
  • Webpack 2.5(应该也适用于 Webpack 3)
  • 打字稿 2.3

安装 Google Chrome 扩展:

1) 点击左边的方形图标。

2,3) 键入不带逗号的 "Debugger for Chrome",然后单击安装。

配置调试器:

4) 单击错误图标。

5) 单击齿轮图标。这将打开 "launch.json" 用于在 Visual Studio 代码中配置调试。

现在。这是真正棘手的地方。这是它可能适合或不适合您的部分。

再次感谢 robin-a-meade from GitHub,他的代码使它工作:

6) 输入以下内容。这将启动一个 Google Chrome 实例,在 URL 中带有 http://localhost。然后,它将使用 webpack:// 路径搜索 Webpack 映射。这真的很棘手,您可能必须尝试不同的组合才能看到哪个有效。

 {
            "name": "Launch Chrome against localhost, with sourcemaps",
            "type": "chrome",
            "request": "launch",
            "url": "http://localhost",
            "sourceMaps": true,
            "webRoot": "${workspaceRoot}",
            "diagnosticLogging": true,
            "sourceMapPathOverrides": {
                "webpack:///./*": "${webRoot}/*"
            }
        }

如果您使用的是 Firefox,请尝试使用这个:

{
            "name": "Launch Firefox",
            "type": "firefox",
            "firefoxExecutable": "C:/Program Files/Mozilla Firefox/firefox.exe",
            "request": "launch",
            "reAttach": true,
            "webRoot": "${workspaceRoot}",
            "sourceMaps": "server",

            "pathMappings": [
                {
                    "url":  "webpack:///",
                    "path": "${webRoot}/"
                }
            ],
            "url": "localhost"
        }

Webpack 配置 添加:

开发工具:"source-map"

到你的 webpack 配置。这应该在 modules.export 对象下。

Run/Build 带有Webpack的项目;这应该生成源映射(检查源映射是否生成,否则什么都不会起作用!):

那么你应该准备好了: 在调试中按"Play button",它应该可以工作了!

请记住,任何 未导入到您的主 .js 文件(您拥有所有导入和要求的文件)的文件,将无法设置断点

如果这不起作用,请查看此 URL 列表,它们可以帮助您。

  1. https://github.com/angular/angular-cli/issues/2453(帮助我的奇迹页面)
  2. Debug webpack bundled node ts with Visual Studio Code
  3. VS Code: "Breakpoint ignored because generated code not found" error
  4. https://github.com/Microsoft/vscode-chrome-debug
  5. https://github.com/Microsoft/vscode/issues/25349
  6. https://github.com/angular/angular-cli/issues/1223
  7. https://github.com/Microsoft/vscode-chrome-debug/issues/40(页面底部)

用于生成源地图: