VSCodeでAngularをデバッグする方法は?


127

ブレークポイントが機能するようにAngularとVSCodeを構成するにはどうすればよいですか?


どういう意味ですか?彼らはどのように機能しませんか?
TylerH 2017

2
@TylerH、それはそれがどのように機能するかのガイドである必要があります。launch.jsonを変更しないと機能しません。
Asesjix 2017

回答:


178

Angular 5 / CLI 1.5.5でテスト済み

  1. Chromeデバッガ拡張機能をインストールする
  2. launch.json(.vscodeフォルダー内に)を作成します。
  3. 私を使用launch.json(下記参照)
  4. tasks.json(.vscodeフォルダー内に)を作成します。
  5. 私を使用tasks.json(下記参照)
  6. CTRL+ SHIFT+を押すB
  7. 押す F5

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
        }
      }
    ]
  }

Angular 2.4.8でテスト済み

  1. Chromeデバッガ拡張機能をインストールする
  2. を作成します launch.json
  3. 私を使用launch.json(下記参照)
  4. NGライブ開発サーバーを起動します(ng serve
  5. 押す F5

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/*"
      }
    }
  ]
}

7
ワンクリックでNG Live Development Server起動Chromeして起動する方法を知っていF5ますか?
Merdan Gochmuradov 2017

2
タスク「ng serve」をpreLaunchTaskで開始する必要があるため、それは不可能です。「ng serve」は永続的に実行されている必要があるため、「preLaunchTask」は完了していません。これは、vsコードがデバッグプロセスを開始しないことを意味します。しかし、作業を少し速くする新しい構成を追加しました;-)
Asesjix

1
明確で短い答え。あなたはについての短い中で説明することができる場合、それは良いでしょうlaunch.jsonし、tasks.jsonここで行います。私が理解したとおりlaunch.json、ノードサーバーを起動してポート8080をリッスンし、アプリケーションを実行するコマンドをtasks.json使用npmして実行するように指示しng serveます。
シャイユット

@Zachscsどの角度バージョンを使用しましたか?
Asesjix

1
私は同じ問題を抱えていましたが、ブレークポイントが設定されていませんでした。$ {workspaceFolder} / my-app-folderの代わりにwebRoot( "webRoot": "$ {workspaceFolder}")のデフォルト値がありました
Joseph Simpson

48

VS Codeチームがデバッグレシピを保存しているようです。

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"]
    }      
  ]
}

10

それには2つの異なる方法があります。新しいプロセスを起動するか、既存のプロセスにアタッチできます。

両方のプロセスの重要なポイントは、webpack開発サーバーとVSCodeデバッガーを同時に実行することです。

プロセスを起動する

  1. あなたにはlaunch.json、ファイル次の設定を追加します:

    {
      "version": "0.2.0",
      "configurations": [
        {
          "name": "Angular debugging session",
          "type": "chrome",
          "request": "launch",
          "url": "http://localhost:4200",
          "webRoot": "${workspaceFolder}"
        }
      ]
    }
    
  2. 次のコマンドを実行して、Angular CLIからWebpack開発サーバーを実行します。 npm start

  3. VSCodeデバッガーに移動し、「角度デバッグセッション」構成を実行します。その結果、アプリケーションを含む新しいブラウザウィンドウが開きます。

既存のプロセスにアタッチする

  1. そのためには、ポートを開いた状態でChromeをデバッガモードで実行する必要があります(私の場合は9222):

    マック:

    /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
    

    ウィンドウズ:

    chrome.exe --remote-debugging-port=9222
    
  2. launch.json ファイルは次のようになります。

    {
      "version": "0.2.0",
      "configurations": [
        {
          "name": "Chrome Attach",
          "type": "chrome",
          "request": "attach",
          "port": 9222,
          "url": "http://localhost:4200/",
          "webRoot": "${workspaceFolder}"
        } 
      ]
    }
    
  3. 次のコマンドを実行して、Angular CLIからWebpack開発サーバーを実行します。 npm start
  4. 「Chrome Attach」構成を選択して実行します。

この場合、デバッガーは、新しいウィンドウを起動するのではなく、既存のChromeプロセスに接続されます。

私は自分の記事を書き、このアプローチをイラストで説明しました。

VSCodeでAngularのデバッガーを構成する簡単な指示


ありがとう、chrome.exe --remote-debugging-port=9222Chrome を起動するたびにこのコマンドを実行する必要があります
。1回限りの

資格情報によっては、Windowsのスタートメニューでクロムを右クリックし、プロパティをクリックして、そこにフラグを追加できる場合があります。これは私の仕事用コンピューターでは機能しません。そのため、Windowsのgit bashでコマンドのエイリアスを作成しました。
vitale232

7

これについては、Visual Studio Codeサイトで詳しく説明されています:https : //code.visualstudio.com/docs/nodejs/angular-tutorial


もしかしてcode.visualstudio.com/docs/nodejs/...を?・#_debugging-angularポイントは、回答を編集したい場合は、興味深いポイントを直接指します...
Pipo

@Pipoいいえ、私はnodejsを意味するのではなく、サーバー側でnodejsを使用しないので、わかりません。
Victor Ionescu

3

この構成を使用できます:

{
 "version": "0.2.0",
"configurations": [
{
        "name": "ng serve",
        "type": "chrome",
        "request": "launch",
        "preLaunchTask": "npm: start",
        "url": "http://localhost:8080",
        "webRoot": "${workspaceFolder}"
      }
]
}

2

これは少し軽量なソリューションで、Angular 2+で動作します(私はAngular 4を使用しています)

MEANスタックを実行する場合、OLAP Serverの設定も追加しました。

{
  // 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"
      ]
    }
  ]
}

この構成で角度と同時にサーバー側コードをデバッグ/ブレークポイントできますか?
Mika571

@ Mika571いいえ、残念ながら...私は今これを試しました。サーバー側とクライアント側も同時にデバッグしたいのですが。
Leniel Maccaferri、

1

@Asesjixの回答は非常に詳細ですが、指摘されているように、ng serveChromeでAngularアプリを起動して起動するには、複数の操作が必要です。次の設定を使用して、シングルクリックでこれを機能させました。@Asesjixの答えとの主な違いは、タスクタイプが現在でshellあり、コマンド呼び出しがstart以前に追加されるng serveためng serve、独自のプロセスに存在してデバッガーの起動をブロックしないことです。

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"
        }
    ]
}

0

私の場合、元のAngularプロジェクトフォルダーツリーを使用しなかったため、webRoot/で問題が発生していることがわかりました{workspaceFolder}ビットに、すべての実験で結果が得られませんでした。別のSOの回答からヒントを得ました。もう一度見つけたらリンクします。

私を助けたのは{workspaceFolder}、実行時に変数の内容を見つけ、それを「app / *」がある「src」フォルダーの場所に変更することでした。それを見つけるために、preLaunchTasklaunch.jsonファイルにとの値を出力するタスクを追加しました{workspaceFolder}

launch.json、これは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デフォルトでは存在しません。Ctrl + Shift + pを押すと、「他のコマンドのタスクを作成する」などと呼ばれていると思います。tasks.jsonの作成後は表示されないようです。また、launch.jsonと同じ場所にファイルを作成することもできます。

{
  "version": "2.0.0",
  "tasks": [
    {
      "label": "Echo values",
      "command": "echo",
      "args": ["${env:USERNAME}", "workspaceFolder = ${workspaceFolder}"],
      "type": "shell"
    }
  ]
}

$ {workspaceFolder}の値がわかったら、新しいプロジェクトツリーのsrcフォルダーを指すように修正し、すべて機能しました。デバッグはng serve、起動前タスクとして、またはビルドの一部として(上記の例)、またはコマンドプロンプトで実行されている必要があります。

以下は、使用できるすべての変数へのリンクです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.