Odpowiedzi:
launch.json
(wewnątrz folderu .vscode)launch.json
(patrz poniżej)tasks.json
(wewnątrz folderu .vscode)tasks.json
(patrz poniżej)launch.json for angular/cli >= 1.3
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Chrome",
"type": "chrome",
"request": "launch",
"url": "http://localhost:4200/#",
"webRoot": "${workspaceFolder}"
},
{
"name": "Attach Chrome",
"type": "chrome",
"request": "attach",
"url": "http://localhost:4200/#",
"webRoot": "${workspaceFolder}"
},
{
"name": "Launch Chrome (Test)",
"type": "chrome",
"request": "launch",
"url": "http://localhost:9876/debug.html",
"webRoot": "${workspaceFolder}"
},
{
"name": "Launch Chrome (E2E)",
"type": "node",
"request": "launch",
"program": "${workspaceFolder}/node_modules/protractor/bin/protractor",
"protocol": "inspector",
"args": ["${workspaceFolder}/protractor.conf.js"]
}
]
}
tasks.json for angular/cli >= 1.3
{
"version": "2.0.0",
"tasks": [
{
"identifier": "ng serve",
"type": "npm",
"script": "start",
"problemMatcher": [],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"identifier": "ng test",
"type": "npm",
"script": "test",
"problemMatcher": [],
"group": {
"kind": "test",
"isDefault": true
}
}
]
}
launch.json
launch.json
(patrz poniżej)ng serve
)launch.json for angular/cli >= 1.0.0-beta.32
{
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome",
"url": "http://localhost:4200",
"webRoot": "${workspaceFolder}",
"sourceMaps": true,
"userDataDir": "${workspaceFolder}/.vscode/chrome",
"runtimeArgs": [
"--disable-session-crashed-bubble"
]
},
{
"name": "Attach Chrome",
"type": "chrome",
"request": "attach",
"url": "http://localhost:4200",
"port": 9222,
"webRoot": "${workspaceFolder}",
"sourceMaps": true
}
]
}
launch.json for angular/cli < 1.0.0-beta.32
{
"version": "0.2.0",
"configurations": [
{
"name": "Lunch Chrome",
"type": "chrome",
"request": "launch",
"url": "http://localhost:4200",
"webRoot": "${workspaceFolder}/src/app",
"sourceMaps": true,
"sourceMapPathOverrides": {
"webpack:///./~/*": "${workspaceFolder}/node_modules/*",
"webpack:///./src/*": "${workspaceFolder}/src/*"
},
"userDataDir": "${workspaceFolder}/.vscode/chrome",
"runtimeArgs": [
"--disable-session-crashed-bubble"
]
},
{
"name": "Attach Chrome",
"type": "chrome",
"request": "attach",
"url": "http://localhost:4200",
"port": 9222,
"webRoot": "${workspaceFolder}/src/app",
"sourceMaps": true,
"sourceMapPathOverrides": {
"webpack:///./~/*": "${workspaceFolder}/node_modules/*",
"webpack:///./src/*": "${workspaceFolder}/src/*"
}
}
]
}
NG Live Development Server
a następnie uruchomić Chrome
jednym F5
kliknięciem?
launch.json
i tasks.json
zrobić tutaj. Jak zrozumiałem, launch.json
polega na uruchomieniu serwera węzła i nasłuchiwaniu portu 8080 oraz tasks.json
poinstruowaniu o użyciu npm
i wykonaniu polecenia w ng serve
celu uruchomienia aplikacji.
Wygląda na to, że zespół VS Code przechowuje teraz przepisy na debugowanie.
https://github.com/Microsoft/vscode-recipes/tree/master/Angular-CLI
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch Chrome with ng serve",
"type": "chrome",
"request": "launch",
"url": "http://localhost:4200",
"webRoot": "${workspaceRoot}"
},
{
"name": "Launch Chrome with ng test",
"type": "chrome",
"request": "launch",
"url": "http://localhost:9876/debug.html",
"webRoot": "${workspaceRoot}"
},
{
"name": "Launch ng e2e",
"type": "node",
"request": "launch",
"program": "${workspaceRoot}/node_modules/protractor/bin/protractor",
"protocol": "inspector",
"args": ["${workspaceRoot}/protractor.conf.js"]
}
]
}
Można to zrobić na dwa różne sposoby. Możesz uruchomić nowy proces lub dołączyć do już istniejącego.
Kluczową kwestią w obu procesach jest jednoczesne działanie serwera webpack i debuggera VSCode .
W swoim launch.json
pliku dodaj następującą konfigurację:
{
"version": "0.2.0",
"configurations": [
{
"name": "Angular debugging session",
"type": "chrome",
"request": "launch",
"url": "http://localhost:4200",
"webRoot": "${workspaceFolder}"
}
]
}
Uruchom serwer deweloperski Webpack z Angular CLI, wykonując npm start
W tym celu musisz uruchomić Chrome w trybie debuggera z otwartym portem (w moim przypadku będzie 9222
):
Prochowiec:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
Okna:
chrome.exe --remote-debugging-port=9222
launch.json
plik będzie wyglądał następująco:
{
"version": "0.2.0",
"configurations": [
{
"name": "Chrome Attach",
"type": "chrome",
"request": "attach",
"port": 9222,
"url": "http://localhost:4200/",
"webRoot": "${workspaceFolder}"
}
]
}
npm start
W takim przypadku debugger jest dołączony do istniejącego procesu Chrome zamiast uruchamiania nowego okna.
Napisałem własny artykuł, w którym opisałem to podejście ilustracjami.
Prosta instrukcja konfiguracji debuggera dla Angulara w VSCode
chrome.exe --remote-debugging-port=9222
istnieje alternatywa dla jednorazowej konfiguracji
Jest to szczegółowo wyjaśnione w witrynie Visual Studio Code: https://code.visualstudio.com/docs/nodejs/angular-tutorial
Może używać tej konfiguracji:
{
"version": "0.2.0",
"configurations": [
{
"name": "ng serve",
"type": "chrome",
"request": "launch",
"preLaunchTask": "npm: start",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}"
}
]
}
Tutaj jest nieco lżejsze rozwiązanie, działa z Angular 2+ (używam Angular 4)
Dodano także ustawienia dla Express Server, jeśli używasz stosu MEAN.
{
// 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 Angular Client",
"type": "chrome",
"request": "launch",
"url": "http://localhost:4200",
"runtimeArgs": [
"--user-data-dir",
"--remote-debugging-port=9222"
],
"sourceMaps": true,
"trace": true,
"webRoot": "${workspaceRoot}/client/",
"userDataDir": "${workspaceRoot}/.vscode/chrome"
},
{
"type": "node",
"request": "launch",
"name": "Launch Express Server",
"program": "${workspaceRoot}/server/bin/www",
"outFiles": [
"${workspaceRoot}/out/**/*.js"
]
}
]
}
Odpowiedź @Asesjix jest bardzo dokładna, ale jak niektórzy zauważyli, nadal wymaga wielu interakcji, aby rozpocząć, ng serve
a następnie uruchomić aplikację Angular w Chrome. Mam to działające jednym kliknięciem przy użyciu następującej konfiguracji. Główną różnicą w stosunku do odpowiedzi @ Asesjix jest to, że typ zadania jest teraz, shell
a wywołania poleceń są dodawane start
wcześniej, ng serve
więc ng serve
mogą istnieć w swoim własnym procesie i nie blokować uruchamiania debugera:
tasks.json:
{
"version": "2.0.0",
"tasks": [
{
"label": "ng serve",
"type": "shell",
"command": "\"start ng serve\""
},
{
"label": "ng test",
"type": "shell",
"command": "\"start ng test\"",
}
]
}
launch.json:
{
"version": "0.2.0",
"configurations": [
{
"name": "Launch in Chrome",
"type": "chrome",
"request": "launch",
"url": "http://localhost:4200",
"webRoot": "${workspaceFolder}",
"preLaunchTask": "ng serve"
}
]
}
W moim przypadku nie użyłem oryginalnego drzewa folderów projektu Angular i wiedziałem, że coś jest nie tak z webRoot
/ {workspaceFolder}
bit, ale wszystkie moje eksperymenty nie przyniosły rezultatu. Mam wskazówkę od innej SO odpowiedzi, którą połączę, jeśli znajdę ją ponownie.
Pomogło mi znalezienie zawartości zmiennej {workspaceFolder}
w czasie wykonywania, a następnie zmodyfikowanie jej do lokalizacji mojego folderu „src”, w którym znajduje się „app / *”. Aby go znaleźć, dodałem a preLaunchTask
do mojego pliku launch.json i zadanie, aby wyświetlić wartość {workspaceFolder}
.
launch.json , który pojawia się po zainstalowaniu debugera Chrome
{
"version": "0.2.0",
"configurations": [
{
"type": "chrome",
"request": "launch",
"name": "Launch Chrome against localhost",
"url": "http://localhost:4200",
"webRoot": "${workspaceFolder}/src/newProjectRoot/",
"preLaunchTask": "Echo values" //Just to see what the cryptic vs code variables actually are https://code.visualstudio.com/docs/editor/variables-reference
}
]
}
Tasks.json Nie występuje domyślnie. Naciśnij Ctrl + Shift + p i myślę, że nazywa się to „utwórz zadanie dla innego polecenia” lub czymś podobnym. Wydaje się, że nie można go zobaczyć po utworzeniu tasks.json. Możesz także po prostu utworzyć plik w tej samej lokalizacji co launch.json
{
"version": "2.0.0",
"tasks": [
{
"label": "Echo values",
"command": "echo",
"args": ["${env:USERNAME}", "workspaceFolder = ${workspaceFolder}"],
"type": "shell"
}
]
}
Kiedy poznałem wartość $ {workspaceFolder}, naprawiłem go tak, aby wskazywał na mój folder src w moim nowym drzewie projektu i wszystko działało. Debugowanie wymaga ng serve
uruchomienia jako zadania przed uruchomieniem, jako część kompilacji (przykłady powyżej) lub w wierszu polecenia.
Oto link do wszystkich zmiennych, których możesz użyć: