在VSCode的Chrome调试器中,对于sourceMapPathOverrides设置的记录备忘

我对标题有些困惑。希望有跟我一样陷入其中并得到解答的人能够帮助我。

请注意

在Angular项目中运行良好,但是在相同的思路下,尝试使用React + Docker的结构时却失败了。

或许条件之一是像Angular2那样默认安装Webpack且能显示源映射,(我尝试的React项目在Webpack中并未显示源映射)。如果你阅读了官方的“Sourcemaps”章节并思考了“如果Webpack没有源映射会怎样”的问题,可能也会有这种理解。

如果您是在React或Vue + Docker的环境下找到了这篇文章,那么在Remote Development扩展中使用Debugger for Chrome的文章可以让您了解更多,因此我会附上它。
这是关于使用Visual Studio Code Remote的Container来构建Vue.js开发环境的讨论。

我迷上了这个内容

因为听说VSCode有一个名为Debugger for Chrome的方便扩展功能,所以我尝试在VSCode上调试Angular的代码。

然而在断点处处理并没有停止下来。

环境

我参照了以下的文章来搭建Docker环境。
轻松搭建Docker × Angular环境。

产生的原因。

Chrome调试器的launch.json(配置文件)的描述不正确。

解决方案(仅结果)

最终的launch.json(配置文件)如下。

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "chrome",
            "request": "launch",
            "name": "for angular",
            "url": "http://localhost:4200",
            "webRoot": "${workspaceFolder}",
            "sourceMaps": true,
            "sourceMapPathOverrides": {
                "webpack:///./*": "${webRoot}/server/angular-app/*"
                }
        }
    ]
}

如果您尝试复制粘贴上述内容,并且成功了,那可能是运气非常好的(^^;

如果您已经理解了下面的文章,那么您可能不需要继续阅读了。
在Docker容器中使用VSCode调试启动的Angular
“可以在现代JavaScript开发中使用的远程调试和日志记录技巧(2018年版-下篇)”
Visual Studio Code无法正常工作的调试。

解释

只要你理解了sourceMapPathOverrides要做什么,就可以正确地进行设置。

试图使用sourceMapPathOverrides进行的操作。

将浏览器的源代码映射和本地的源代码映射(在VScode中实现)进行关联。

这里还有一件重要的事情,那就是webRoot是什么。

            "webRoot": "${workspaceFolder}",

${workspaceFolder}是默认的表达方式,它指的是VScode中工作空间的根目录。

如何引导解决方案

※ 这个源码自身是Angular的教程。

关于浏览器源代码的布置

首先,关于浏览器源代码的位置。如果您在Docker容器中使用Angular启动,并在VSCode中进行调试,按照您所写的,可以在Chrome开发工具中打开“来源”选项,并查看适当的源文件所在的路径,就能明白它是什么样的路径了。

スクリーンショット 2020-11-04 19.23.21 3.png

比如说,上述的hero.service.ts被放置在浏览器的源代码位置webpack:///./src/app/hero.service.ts中。

由于我想要对src文件夹中的所有源代码进行调试,因此我想将浏览器的源代码布置绑定为webpack:///./*。

关于本地源配置

这次的层级

angular-traial ←※ webRoot=`${workspaceFolder}`の位置
├── .vscode
│   └── launch.js
├── docker
│   └── node
│       └── Dockerfile
├── docker-compose.yml
└── server
    └── angular-app
        ├── README.md
        ├── angular.json
        ├── e2e
        ├── karma.conf.js
        ├── node_modules
        ├── package-lock.json
        ├── package.json
        ├── src
        │   ├── app
        │   │   ├── app-routing.module.ts
        │   │   ├── app.component.html
        │   │   ├── app.component.sass
        │   │   ├── app.component.spec.ts
        │   │   ├── app.component.ts
        │   │   ├── app.component_bk.html
        │   │   ├── app.module.ts
        │   │   ├── dashboard
        │   │   ├── hero-detail
        │   │   ├── hero-search
        │   │   ├── hero.service.spec.ts
        │   │   ├── hero.service.ts
        ~以下省略~

スクリーンショット 2020-11-04 20.00.02.png

在这里,webRoot = $ {workspaceFolder}指的是什么位置呢?
直白地说,它指的是VScode工作区的根位置,这次是在angular-trial文件夹的位置(尽管在层次结构中也进行了描述)。

在这里,根据每个人是如何打开个人工作区的,若要创建launch.js,应该是${workspaceFolder}/.vscode.

调整浏览器和本地源文件的配置。

如果考虑将浏览器的源代码位置配置为包括src文件夹在内的webpack:///./*,那么

如果将本地源代码放置在src文件夹中(以及更高级的层次)/angular-traial/server/angular-app/*的话,
=${workspaceFolder}/server/angular-app/*
=${webRoot}/server/angular-app/*
将是正确的设置。

            "sourceMapPathOverrides": {
                "webpack:///./*": "${webRoot}/server/angular-app/*"
                }

闲谈

如果理解到这一点,那么将”只将调试目标限制在src文件夹内”也变得很容易了。

            "sourceMapPathOverrides": {
                "webpack:///./src/*": "${webRoot}/server/angular-app/src/*"
                }

当然,增加了两种不同的/src/部分,但具体参考的标准可能因网站或参考资料的不同而有所差异。

如果你明白sourceMapPathOverrides的作用,应该就能够应对了。

结束

使用Chrome调试器后,不需要每次在开发者工具中查找源代码,这样很方便。(虽然有点困难,但是对学习Angular会有很大进展)

就是这样!

广告
将在 10 秒后关闭
bannerAds