การใช้ node-inspector กับงาน Grunt


101

มีใครใช้ตัวตรวจสอบโหนดกับGruntสำหรับการดีบักแอปพลิเคชันหรือไม่ ถ้าไม่คุณสามารถแนะนำเครื่องมือดีบั๊กสำหรับแอพที่ใช้ Grunt ได้ไหม

ฉันทำงานกับnodejsสำหรับแอปฝั่งเซิร์ฟเวอร์และฉันมีGrunt ที่จะใช้งานที่แยกจากกัน (เนื่องจากผู้ใช้สามารถดำเนินการงานแยกกันได้)


console.log เป็นเพื่อนของคุณ .. ฉันชอบที่จะเข้าถึง node-inspector แต่ฉันคิดว่าเครื่องมือดีบักไม่ได้เป็นส่วนหนึ่งของ V8 ตามที่ฉันเข้าใจเครื่องมือดีบักเป็นเว็บแอปที่เหมาะสม แก้ไขฉันถ้าฉันผิดที่นี่เพราะฉันอยากจะทำในสิ่งที่คุณพยายาม
iancrowther

ใช่ระบบบันทึก (ฉันหมายถึง console.log หรือกลไกการบันทึกประเภทอื่น ๆ ) จะเป็นเพื่อนของเราเสมอ แต่สิ่งที่ฉันต้องการคือวิธีที่แตกต่างและแก้ไขได้มากกว่า ตอนนี้ฉันพบข้อกำหนดบางอย่างที่ขาดหายไปในโปรเจ็กต์ของฉันด้วยความฮึกเหิมดังนั้นฉันจึงลบออกไปในตอนนี้และฉันใช้ nodejs เหมือนเดิมดังนั้นฉันจึงสามารถดีบักโดยใช้ node-inspector ได้ในตอนนี้ ฉันรู้ว่ามันไม่ใช่วิธีแก้ปัญหา แต่ได้ผล ฉันคิดว่าในอนาคตฉันจะเพิ่มความฮึกเหิมอีกครั้งด้วยการตรวจสอบโหนดและเครื่องมือ / คุณสมบัติอื่น ๆ ที่เพิ่มเข้ามา สุดท้าย แต่ไม่ท้ายสุดฮึดฮัดมันสุดยอดมาก! ฉันใช้มันในโปรเจ็กต์อื่น ๆ และหินจริงๆ!
JuanO

เพิ่งเริ่มเล่นกับ Grunt สนใจคำถามนั้นด้วย ...
Dmitry Pashkevich

@iancrowther เครื่องมือตรวจสอบเว็บที่ใช้อยู่ใน V8 มีโครงการที่เรียกnode-inspectorว่าคุยnode --debugด้วยโดยให้ข้อมูลการแก้ไขข้อบกพร่องไปยังเบราว์เซอร์ที่เชื่อมต่อ สิ่งนี้ยอดเยี่ยมมากเพราะคุณสามารถเชื่อมต่อ Chrome กับกระบวนการตรวจสอบโหนดและใช้เครื่องมือตัวตรวจสอบเว็บทั้งหมดเพื่อแก้ไขข้อบกพร่องของแอปของคุณ github.com/dannycoates/node-inspector
David Souther

คำตอบ:


135

ในการรันคำรามในการดีบักคุณต้องส่งสคริปต์ฮึดฮัดไปยังโหนดอย่างชัดเจน:

node-debug $(which grunt) task

และวางdebugger;สายในงานของคุณ node-inspectorจากนั้นจะเปิดเบราว์เซอร์พร้อมเครื่องมือแก้ไขจุดบกพร่อง

แก้ไข 28 ก.พ. 2557

node-inspectorได้เพิ่มคำสั่งnode-debugซึ่งเปิดโหนดใน--debugสถานะและเปิดเบราว์เซอร์ไปยังnode-inspectorเพจหยุดเมื่อถึงdebuggerบรรทัดแรกหรือตั้งเบรกพอยต์

แก้ไข 30 มกราคม 2558

บน Windows สิ่งต่าง ๆ มีความซับซ้อนมากขึ้น ดูคำตอบจาก @ e.gluhotorenko สำหรับคำแนะนำ


1
นี่มันเยี่ยมมาก นอกจากนี้ยังทำงานบนถังขยะ npm อื่น ๆ ที่ติดตั้งทั่วโลก
กรุณา

1
โหนดดีบัก $ (ซึ่งฮึดฮัด) งานใช้ดีบักเกอร์เริ่มต้น nodejs
Tomas Romero

3
ฉันมีปัญหาเล็กน้อยกับเรื่องนี้ คุณช่วยชี้แจง$(which grunt)ได้ไหมว่าคืออะไร? เป็นเพียง Gruntfile.js ที่ฉันต้องการดีบักหรือไม่ และtaskฉันจะใส่ (ใช้serveเป็นตัวอย่าง) grunt serveหรือแค่serve? ฉันได้ลองnode-debug Gruntfile.js serveและอื่น ๆ อีกมากมาย แต่ฉันไม่สามารถทำให้มันใช้งานได้ Node-inspector จะเปิดขึ้นและมันแตกในบรรทัดแรก แต่ฉันไม่สามารถเจาะเข้าไปในserveงานได้แม้ว่าฉันจะใส่debugger;บรรทัดเป็นบรรทัดแรกของฟังก์ชันก็ตาม
Brett

2
@brett คุณใช้ windows หรือ OSX / Linux? ใน unix $ (ซึ่งฮึดฮัด) จะถูกแทนที่ด้วยพา ธ แบบเต็มไปยังgrunt.jsสคริปต์grunt-cli นั่นคือสคริปต์ที่เรียกใช้ Grunt จริงๆ หากคุณใช้ windows ให้ดูที่stackoverflow.com/a/13443026/240358 (คำตอบด้านล่างนี้) เพื่อดูตำแหน่งที่เป็นไปได้ของสคริปต์ grunt-cli ที่เข้ามาแทนที่gruntในคำสั่งของคุณ - ในตัวอย่างของคุณแทนที่taskด้วยserve
David Souther

ขอบคุณ @DavidSouther คุณต้องการเพิ่มส่วนเฉพาะของ windows ในคำตอบของคุณหรือไม่ ฉันควรจะย้ายไปใช้ linux จริงๆ ...
Brett

39

โซลูชัน Windows

วิ่ง

node --debug-brk c:\Users\username\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt taskname

จาก cmd ในไดเรกทอรีด้วยGruntfile.jsไฟล์. อย่าลืมวางdebugger;สายในสถานที่ที่จำเป็น


3
เริ่มต้นด้วยเสียงฮึดฮัด 0.4 จุดเข้าฮึดฮัดเป็นส่วนหนึ่งของgrunt-cliแพ็คเกจ:node --debug-brk [..]\node_modules\grunt-cli\bin\grunt
Mistaecko

4
ขอบคุณมากสำหรับคำแนะนำของ Windows ใน powershell คุณสามารถใช้ตัวหนอนเพื่อทำให้สิ่งนี้เปราะบางน้อยลงnode --debug-brk (Resolve-Path ~\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt) taskname
George Mauer

ผู้ชายฉันใช้เวลาเพียง 30 นาทีในการหาสิ่งนี้จากนั้นอัปเดตคำตอบของฉัน! ฉันควรจะเลื่อนลงไป!
David Souther

1
อย่าลืมเปิดคอนโซลอื่นแล้วรันnode-inspector
valter.santos.matos

@ valter.santos.matos จริงๆแล้วตอนนี้คุณควรใช้โหนด --inspect ที่ระบุไว้ด้านล่าง
Jackie

7

ในการดีบักเราต้องแก้ไขไฟล์ฮึดฮัดภายใต้ bin บนเครื่องของฉันคำรามถูกติดตั้งทั่วโลกดังนั้นฉันจึงไปที่ / usr / local / lib / node_modules / grunt / bin ฉันเปิดไฟล์และแก้ไข:

#!/usr/bin/env node

ถึง

#!/usr/bin/env node --debug-brk

--debug-brk จะหยุดทำงานในบรรทัดแรกของจาวาสคริปต์ที่รัน

การทำเช่นนั้นเพียงอย่างเดียวนั้นไม่เพียงพอเนื่องจากคุณจะไม่พบไฟล์ js ที่คุณกำลังทำงานหนักในรายการแบบเลื่อนลงในตัวตรวจสอบโหนดดังนั้นคุณต้องแก้ไขไฟล์ที่คุณสนใจในการดีบักโดยเพิ่มdebugger;ที่ คุณต้องการให้เบรกพอยต์เกิดขึ้น ตอนนี้คุณสามารถคลิกดำเนินการต่อหลังจากหยุดพักแรกแล้วคุณจะเข้าdebugger;แถว

ค่อนข้างแย่ แต่มันเป็นวิธีเดียวที่ฉันพบจนถึงตอนนี้


2
นี่เป็นสิ่งที่น่าเหลือเชื่ออย่างไม่น่าเชื่อเนื่องจากมันอาศัยพฤติกรรมที่หลากหลายใน / usr / bin / env และเวทมนตร์ที่ไม่มีเอกสารระหว่าง # และ \ n ในบรรทัด Shebang
David Souther

2
มันไม่ได้ผลสำหรับฉัน Grunt ยังคงทำงานโดยไม่มีโหมดดีบัก
Eugene Gluhotorenko

@DavidSouther Shebangs ไม่ใช่เวทมนตร์ที่ไม่มีเอกสาร เป็นพฤติกรรม POSIX มาตรฐาน
Miles Rout

6

ฉันเพิ่งสร้าง grunt-node-inspector เพื่อกำหนดค่า node-inspector อย่างง่ายดายด้วยเวิร์กโฟลว์ที่เหลือของคุณลองดูที่: https://github.com/ChrisWren/grunt-node-inspector

นี่คือส่วนของ Gruntfile ซึ่งแสดงให้เห็นว่าคุณสามารถดีบักงานฮึดฮัดได้อย่างไรโดยใช้ grunt-node-inspector, grunt-concurrent และ grunt-shell: https://github.com/CabinJS/Cabin/blob/master/Gruntfile js # L44-L77


คุณกำลังคิดอยู่node --debug-brk $(which grunt) node-inspector build testหรือเปล่า? ฉันชอบมัน.
David Souther

ค่อนข้างมากยกเว้นฉันใช้พร้อมกันเพราะnode-inspectorจะไม่ออกและอนุญาตbuildและtestรันเนื่องจากมันทำงานตลอดไป ฉันได้เพิ่มลิงก์ไปยังตัวอย่างข้อมูลที่ฉันตั้งค่าไว้
ChrisWren

อืม. ในความคิดที่สอง ... ขั้นตอนการทำงานของฉันทำให้ฉันเพิ่งเริ่มต้นnode-inspector &ทิ้งไว้ในพื้นหลังและเรียกมันว่าเสร็จสิ้น มีความคิดของคุณเกี่ยวกับเรื่องนี้หรือไม่?
David Souther

1
ไม่แน่ใจว่าทำไม แต่ดูเหมือนจะไม่ได้ผลสำหรับฉัน ฉันเรียกใช้คำสั่งgrunt node-inspectorจากนั้นไปที่ url localhost และฉันไม่เห็นไฟล์ต้นฉบับ เครื่องมือดีบักเกอร์ว่างเปล่า
Kris Hollenbeck

ฉันจัดการเพื่อให้แหล่งที่มาปรากฏขึ้นโดยเรียกใช้คำสั่งแยกกันสองคำสั่ง grunt node-inspectorและnode --debug-brk Gruntfile.jsจากไดเร็กทอรีฮึดฮัดของฉัน อย่างไรก็ตามเมื่อฉันตั้งค่าเบรกพอยต์ในไฟล์ฮึดมันก็เกิดข้อผิดพลาดในการเชื่อมต่อ
Kris Hollenbeck

4

ฉันได้ทำงานเพื่อเรียกใช้แอพของฉันและเปิดตัวตรวจสอบโหนด มันดีกว่าประพจน์ปัจจุบันมากเพียงแค่เพิ่มงานนี้ใน gruntfile:

  grunt.registerTask('debug', 'My debug task.', function() {
        var done = this.async();
        grunt.util.spawn({
            cmd: 'node',
            args: ['--debug', 'app.js'],
            opts: {
                //cwd: current workin directory
            }
        },
        function (error, result, code) {
            if (error) {
                grunt.log.write (result);
                grunt.fail.fatal(error);
            }
            done();
        });
        grunt.log.writeln ('node started');
        grunt.util.spawn({
            cmd: 'node-inspector',
            args: ['&'],
            opts: {
                //cwd: current workin directory
            }
        },
        function (error, result, code) {
            if (error) {
                grunt.log.write (result);
                grunt.fail.fatal(error);
            }
            done();
        });
        grunt.log.writeln ('inspector started');
    });

1
ผู้เขียน grunt-node-inspector มีสิทธิ์ โซลูชันนี้ใช้งานได้เฉพาะในสภาพแวดล้อม posix ในขณะที่กำหนดค่า node-inspector ได้ง่ายขึ้นและทำงานพร้อมกันบน posix และ windows
rainabba

3

คำตอบที่ดีที่นี่ ในปี 2560 ตอนนี้คุณทำได้

node --inspect --debug-brk $(which grunt) taskName

ซึ่งพิมพ์สิ่งที่ชอบ

To start debugging, open the following URL in Chrome: chrome-devtools://devtools/bundled/inspector.html?experiments=true&v8only=true&ws=127.0.0.1:9229/232652c3-f63c-4b00-8de9-17dfad5db471

เปิด URL นั้นใน chrome เท่านี้ก็เรียบร้อย!

ฉันใช้ Node 7.3.0 และใช้ Mac คุณอาจต้องทำตามคำแนะนำในโพสต์อื่น ๆ เพื่อให้ใช้งานได้บน Windows


2

อัปเดต 2019

  • หากคุณต้องการเปิดงานฮึดฮัดในโหมดดีบักและหยุดที่บรรทัดแรก:

    node --inspect-brk $(which grunt) taskName

  • หากคุณต้องการเรียกใช้งานฮึดฮัดในโหมดดีบักที่พอร์ตเฉพาะ:

    node --inspect-brk=8080 $(which grunt) taskName

  • หากคุณต้องการแนบ VSCODE เข้ากับกระบวนการโหนดที่รันเซสชันการดีบักของฮึดฮัดให้ใช้การกำหนดค่าต่อไปนี้ใน vscode:

{
  // 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": "node",
      "request": "attach",
      "name": "Attach by port IP 5656",
      "port": 8080
    }
  ]
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.