我希望能够使用Visual Studio Code调试Angular2应用程序。
这是我的环境:
使用angular-cli创建一个新项目:
ng new test-VSC-debug
cd test-VSC-debug
然后我打开VSC并加载项目:File/open folder
我点击debug
标志和我configure launch.json
选择chrome
。它生成以下文件:
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Chrome against localhost, with sourcemaps",
"type": "chrome",
"request": "launch",
"url": "http://localhost:8080",
"sourceMaps": true,
"webRoot": "${workspaceRoot}"
},
{
"name": "Attach to Chrome, with sourcemaps",
"type": "chrome",
"request": "attach",
"port": 9222,
"sourceMaps": true,
"webRoot": "${workspaceRoot}"
}
]
}
然后我通过运行启动angular2项目:
ng serve
一旦启动,我在VSC中选择:“针对localhost启动Chrome,使用源映射”。
然后,我收到以下错误: “无法找到chrome:在启动配置中安装或设置runtimeExecutable字段。”
所以我设置: “runtimeExecutable”:“chrome-browser” (因为我的Ubuntu上没有铬但是铬)。
启动应用程序的Angular-cli默认端口是4200.将URL从“http://localhost:8080”更改为“http://localhost:4200”。
现在浏览器正在打开应用程序,但VSC有以下错误:“无法连接到运行时进程,10000毫秒后超时 - (原因:无法连接到目标:连接ECONREFUSED 127.0.0.1:9222”。
从stackoverflow / github问题上找到的其他答案,我已经读过,在尝试这样做之前我可能必须杀死所有的chrome实例,所以我只关闭chrome并运行killall chromium-browser
。
我尝试再次运行调试:与以前相同的错误(无法连接)。
我也看到以下参数可能会有所帮助:
"runtimeArgs": [
"--remote-debugging-port=9222",
"--user-data-dir"
]
但它没有改变任何东西。
我决定使用VSC作为我的typescript开发者(大多数是angular2),这种调试方式看起来非常强大。我觉得不使用它太糟糕了:)。
谢谢你的帮助 !
PS:一些相关的stackoverflow问题和github问题: - Debug & Run Angular2 Typescript with Visual Studio Code? - https://github.com/angular/angular-cli/issues/2453 - https://github.com/angular/angular-cli/issues/1936 - https://github.com/angular/angular-cli/issues/1281
编辑1:!!!部分改进!我找到了一种在Visual Studio代码控制台中获得调试信息的方法!所以它并不完美,因为断点不起作用,但这就是事情。到目前为止,如果我打开http://localhost:9222,我无法看到任何东西。 (“localhost未授权连接”)。
但是,如果我这样推出铬:
chromium-browser --remote-debugging-port=9222 --user-data-dir=remote-profile
重要的是要注意这个论点:--user-data-dir=remote-profile
。如果您只是传递--user-data-dir,它将启动一个没有连接的新窗口。但这还不够。您需要将remote-profile作为值传递。
到目前为止,我希望它可以帮助一些人。但现在的问题是断点不起作用。
如果我找到原因,我会继续挖掘并进行另一次编辑。
我能够在OSX上解决这个问题。这种痛苦的原因是导致这个问题的原因有很多。
--user-data-dir=remote-profile
打第一个:如果你已经在运行Chrome(例如,已经打开了标签 - 谁没有?),你必须使用不同的userDataDir
让Chrome启动一个独立的实例。
但是,正确的方法是将"userDataDir": "${workspaceRoot}/.vscode/chrome",
添加到launch.json配置中(见下文)。这需要成为一条道路。如果使用'remote-profile',它会尝试查找名为'remote-profile'的相对目录。sourceMapPathOverrides
,其值取决于你的操作系统:
OSX:"sourceMapPathOverrides": { "webpack:///./*": "${webRoot}/*" }
Windows:"sourceMapPathOverrides": { "webpack:///C:*":"C:/*" }
Linux:"sourceMapPathOverrides": { "webpack:///*": "/*" }
(注意:我没有测试Windows或Linux版本)这是我在OSX上工作的launch.json
:
{
// Use IntelliSense to learn about possible Node.js debug attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Launch Chrome against localhost, with sourcemaps",
"type": "chrome",
"request": "launch",
"url": "http://localhost:4200",
// This forces chrome to run a brand new instance, allowing existing
// chrome windows to stay open.
"userDataDir": "${workspaceRoot}/.vscode/chrome",
"sourceMaps": true,
"webRoot": "${workspaceRoot}",
//"diagnosticLogging": true,
"sourceMapPathOverrides": { "webpack:///./*": "${webRoot}/*" }
},
{
"name": "Attach to Chrome, with sourcemaps",
"type": "chrome",
"request": "attach",
"url": "http://localhost:4200",
"port": 9222,
"sourceMaps": true,
"webRoot": "${workspaceRoot}",
"diagnosticLogging": true,
"sourceMapPathOverrides": { "webpack:///./*": "${webRoot}/*" }
}
]
}
为此,在终端中运行ng serve
,然后在Visual Studio Code中按F5。
以下是我正在使用的版本:
我终于让它完全运转了!
对于有兴趣的人:
(在Linux上使用chrome-browser,但你可以很容易地用“chrome”代替)。
首先,这是launch.json配置:
{
"version": "0.2.0",
"configurations": [
{
"name": "Attach to Chrome, with sourcemaps",
"type": "chrome",
"request": "attach",
"port": 9222,
"sourceMaps": true,
"webRoot": "${workspaceRoot}/src",
"url": "http://localhost:4200/",
"sourceMapPathOverrides": {
"webpack:///*": "/*"
}
}
]
}
我决定删除带有“请求”的部分:“启动”,因为我需要启动一个新的浏览器窗口。
然后,像这样启动浏览器:
chromium-browser --remote-debugging-port=9222 --user-data-dir=remote-profile
在新窗口中,访问http://localhost:4200。
然后从VSC运行调试。
一切都应该工作得很好,你应该能够使用断点:)
GIF可在此处观看:http://hpics.li/0156b80
与Aaron F.类似,我在Windows环境中对Angular 2+开发人员使用以下设置
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Chrome against localhost, with sourcemaps",
"type": "chrome",
"request": "launch",
"url": "http://localhost:4200",
"sourceMaps": true,
"webRoot": "${workspaceRoot}",
"trace": true,
"smartStep": true,
"runtimeArgs": [
"--disable-session-crashed-bubble",
"--disable-infobars"
],
"userDataDir": "${workspaceRoot}/.vscode/chrome",
"sourceMapPathOverrides": {
"webpack:///./*": "${webRoot}/*"
}
}
]
}
我在Mac OSX上使用Angular CLI 1.7.3和Angular:5.2.9。这是适合我的配置:
{ "version": "0.2.0", "configurations": [ { "type": "chrome", "request": "launch", "name": "Launch Client in Chrome", "sourceMaps": true, "url": "http://localhost:4200", "webRoot": "${workspaceRoot}", "userDataDir": "${workspaceRoot}/.vscode/chrome", "sourceMapPathOverrides": { "webpack:/./*": "${webRoot}/*", "webpack:/src/*": "${webRoot}/src/*", "webpack:/*": "*", "webpack:/./~/*": "${webRoot}/node_modules/*", } } ] }
以下配置适用于使用VSCode v1.23,Angular 6和Chrome 66的macOS。
{
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome",
"url": "http://localhost:4200",
"smartStep": true,
"sourceMaps": true,
"webRoot": "${workspaceFolder}",
"sourceMapPathOverrides": {
"webpack:///./*": "${webRoot}/*",
"webpack:///src/*": "${webRoot}/src/*",
"webpack:///*": "*",
"webpack:///./~/*": "${webRoot}/node_modules/*"
}
}
]
}
我遇到了由Aaron F.提供的launch.json的奇怪问题。
调试器命令行中的“.scripts”给出这样的URL:
webpack-internal:///./src/app/app.component.ts (/home/user/my-dream-app/src/app/app.component.ts)
- webpack:/src/app/app.component.ts (/home/user/my-dream-app/src/app/webpack:/src/app/app.component.ts)
所以VS Code试图使用文件“/home/user/my-dream-app/src/app/webpack:/src/app/app.component.ts”(注意webpack:在中间)。
源地图不起作用,因为我的Chrome将网址设为“webpack:/”并带有一个斜杠。
让它使用这个launch.json:
{
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome with ng serve",
"url": "http://localhost:4200/",
"webRoot": "${workspaceRoot}",
"sourceMapPathOverrides": { "webpack:/*": "${webRoot}/*" }
}
]
}
并得到正确的映射
webpack-internal:///./src/app/app.component.ts (/home/user/my-dream-app/src/app/app.component.ts)
- webpack:/src/app/app.component.ts (/home/user/my-dream-app/src/app/app.component.ts)
我使用windows-vscode遇到了同样的问题,我的launch.json
如下:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome against localhost",
"url": "http://localhost:4200",
"webRoot": "${workspaceFolder}"
}
]
}
然后我从here安装了chrome debug extension,然后解决了错误。
您可以直接安装此扩展程序:
vscode-->Extensions-->search and select "Debugger From Chrome"-->click on install
您可能需要重新启动vscode。
您只需安装Debugger for Chrome扩展程序即可。