ฉันจะกำหนดค่า Angular และ VSCode เพื่อให้เบรกพอยต์ทำงานได้อย่างไร
ฉันจะกำหนดค่า Angular และ VSCode เพื่อให้เบรกพอยต์ทำงานได้อย่างไร
คำตอบ:
launch.json
(ภายในโฟลเดอร์. vscode)launch.json
(ดูด้านล่าง)tasks.json
(ภายในโฟลเดอร์. vscode)tasks.json
(ดูด้านล่าง)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
(ดูด้านล่าง)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
และเปิดใช้งานChrome
ในF5
คลิกเดียวหรือไม่?
launch.json
และtasks.json
ไม่ที่นี่ ตามที่ฉันเข้าใจlaunch.json
คือเปิดเซิร์ฟเวอร์โหนดและฟังพอร์ต 8080 และtasks.json
สั่งให้ใช้npm
และรันคำสั่งng serve
เพื่อรันแอปพลิเคชัน
ดูเหมือนว่าทีม 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"]
}
]
}
มีสองวิธีในการทำเช่นนั้น คุณสามารถเปิดกระบวนการใหม่หรือแนบไปกับกระบวนการที่มีอยู่
จุดสำคัญในกระบวนการทั้งสองคือการมีเซิร์ฟเวอร์ dev webpack และ VSCode ดีบักทำงานในเวลาเดียวกัน
ในlaunch.json
ไฟล์ของคุณเพิ่มการกำหนดค่าต่อไปนี้:
{
"version": "0.2.0",
"configurations": [
{
"name": "Angular debugging session",
"type": "chrome",
"request": "launch",
"url": "http://localhost:4200",
"webRoot": "${workspaceFolder}"
}
]
}
เรียกใช้เซิร์ฟเวอร์ Webpack dev จาก Angular CLI โดยดำเนินการ npm start
สำหรับสิ่งนั้นคุณต้องเรียกใช้ Chrome ในโหมดดีบักเกอร์ด้วยพอร์ตที่เปิดอยู่ (ในกรณีของฉันจะเป็น9222
):
Mac:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222
ของ windows:
chrome.exe --remote-debugging-port=9222
launch.json
ไฟล์จะมีลักษณะดังต่อไปนี้:
{
"version": "0.2.0",
"configurations": [
{
"name": "Chrome Attach",
"type": "chrome",
"request": "attach",
"port": 9222,
"url": "http://localhost:4200/",
"webRoot": "${workspaceFolder}"
}
]
}
npm start
ในกรณีนี้ดีบักเกอร์ที่แนบมากับกระบวนการ Chrome ที่มีอยู่แทนที่จะเปิดหน้าต่างใหม่
ฉันเขียนบทความของตัวเองโดยอธิบายแนวทางนี้พร้อมภาพประกอบ
chrome.exe --remote-debugging-port=9222
มีทางเลือกอื่นสำหรับการกำหนดค่าครั้งเดียวหรือไม่
สิ่งนี้มีคำอธิบายโดยละเอียดในไซต์ Visual Studio Code: https://code.visualstudio.com/docs/nodejs/angular-tutorial
สามารถใช้ config นี้:
{
"version": "0.2.0",
"configurations": [
{
"name": "ng serve",
"type": "chrome",
"request": "launch",
"preLaunchTask": "npm: start",
"url": "http://localhost:8080",
"webRoot": "${workspaceFolder}"
}
]
}
นี่เป็นวิธีแก้ปัญหาที่เบากว่าเล็กน้อยใช้ได้กับ Angular 2+ (ฉันใช้ Angular 4)
เพิ่มการตั้งค่าสำหรับ Express Server ด้วยถ้าคุณเรียกใช้ MEAN stack
{
// 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"
]
}
]
}
คำตอบของ @Asesjix นั้นละเอียดมาก แต่อย่างที่บางคนชี้ให้เห็นว่ายังคงต้องมีการโต้ตอบหลายครั้งเพื่อเริ่มต้นng serve
จากนั้นจึงเปิดแอป Angular ใน Chrome ฉันทำให้สิ่งนี้ทำงานได้ด้วยคลิกเดียวโดยใช้การกำหนดค่าต่อไปนี้ ความแตกต่างที่สำคัญจากคำตอบของ @ 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"
}
]
}
ในกรณีของฉันฉันไม่ได้ใช้แผนผังโฟลเดอร์โครงการ Angular ดั้งเดิมและฉันรู้ว่ามีบางอย่างผิดปกติกับwebRoot
/ {workspaceFolder}
บิต แต่การทดลองทั้งหมดของฉันไม่ได้ผลลัพธ์ มีเคล็ดลับจากคำตอบ SO อื่นซึ่งฉันจะเชื่อมโยงหากพบอีกครั้ง
สิ่งที่ช่วยฉันคือการค้นหาเนื้อหาของตัวแปร{workspaceFolder}
ที่รันไทม์จากนั้นแก้ไขเป็นตำแหน่งของโฟลเดอร์ "src" ที่คุณมี "app / *" ในการค้นหาฉันเพิ่ม a ลงpreLaunchTask
ในไฟล์ launch.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 และฉันคิดว่ามันเรียกว่า 'สร้างงานสำหรับคำสั่งอื่น' หรืออะไรที่คล้ายกัน ดูเหมือนจะมองไม่เห็นหลังจากที่สร้าง task.json แล้ว คุณสามารถสร้างไฟล์ในตำแหน่งเดียวกับlaunch.json
{
"version": "2.0.0",
"tasks": [
{
"label": "Echo values",
"command": "echo",
"args": ["${env:USERNAME}", "workspaceFolder = ${workspaceFolder}"],
"type": "shell"
}
]
}
เมื่อฉันรู้ค่าของ $ {workspaceFolder} แล้วฉันก็แก้ไขให้ชี้ไปที่โฟลเดอร์ src ในแผนผังโครงการใหม่ของฉันและทุกอย่างก็ใช้ได้ การดีบักจำเป็นต้องng serve
รันเป็นงานก่อนเปิดตัวหรือเป็นส่วนหนึ่งของการสร้าง (ตัวอย่างด้านบน) หรือในพรอมต์คำสั่ง
นี่คือลิงค์ไปยังตัวแปรทั้งหมดที่คุณสามารถใช้ได้: