使用源映射和webpack调试typescript

时间:2017-03-19 00:25:11

标签: debugging typescript intellij-idea webpack source-maps

我有使用Typescript编写的项目,我希望能够调试它(在a = np.array(['A','C','G','T','A','C','G','T','M']) b = np.array(['A','C','G','T']) diff = np.setdiff1d(a, b) print diff Chrome Dev Tools中)。

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

在我停止使用webpack之后,我尝试添加bundle.js作为依赖项来解决我遇到的require.js错误。虽然有效,但现在我再次陷入困境并且得到了这个:

  

未捕获的ReferenceError:未定义导出

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

我附上我的配置文件以防丢失的地方:

tsconfig.json

require is not defined

webpack.config.js:

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

2 个答案:

答案 0 :(得分:20)

我打算在这里发一个答案。这个答案可能 为您工作(参见步骤5)。它因人而异。在研究了这么多天之后,GitHub的robin-a-meade的帖子就是钉在它上面的那个。

在开始之前,主要问题似乎在于VS代码调试配置文件内部的源映射的URL,以及它(VS代码)如何看待应用程序。这与您正在使用的任何后端堆栈无关(例如,E.g Express,.NET Core,Django等)。您唯一需要注意的是,Google Chrome会在您的应用程序运行时成功加载生成的源地图。

用于:

  • Visual Studio Code ver 1.13.1
  • NodeJS 7.4.0
  • Windows 10 64位
  • Webpack 2.5(也应该申请Webpack 3)
  • TypeScript 2.3

安装Google Chrome扩展程序:

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

2,3)键入“Debugger for Chrome”,不带逗号,然后点击安装。

Installing Chrome Extension for VS Code

配置调试器:

Configuring the debugger

4)点击bug图标。

5)单击齿轮图标。这将打开“launch.json”,用于在Visual Studio Code中配置调试。

现在。这是它变得非常棘手的地方。这是它可能或可能不适合你的部分。

再次感谢robin-a-meade from GitHub,其代码使其成功:

6)输入以下内容。这将在网址中启动带有http://localhost的Google Chrome实例。然后,它将使用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配置 添加:

devtool:“source-map”

到您的webpack配置。这应该在modules.export对象下。 devtool sourcemap in Webpack

使用Webpack运行/构建项目;这应该生成源映射(检查源映射是否生成,否则什么都不会起作用!): enter image description here

然后你应该准备好了: 在调试中按“播放按钮”它应该正常工作! enter image description here

enter image description here

请注意,任何 未导入主.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(页面底部)
  8. https://stackoverflow.com/a/42405563/1057052
  9. 用于生成soruce贴图: How do I generate sourcemaps when using babel and webpack?

答案 1 :(得分:16)

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

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