ग्रन्ट कार्यों के साथ नोड-इंस्पेक्टर का उपयोग करना


101

क्या किसी ने अनुप्रयोग डिबगिंग के लिए ग्रंट के साथ नोड-इंस्पेक्टर का उपयोग किया है ? यदि नहीं, तो क्या आप ग्रंट आधारित ऐप्स के लिए डिबगिंग टूल की सिफारिश कर सकते हैं?

मैं के साथ काम कर रहा हूँ NodeJS एक सर्वर साइड अनुप्रयोग के लिए और मैं ग्रंट अलग कार्यों का उपयोग करने के (इस वजह से उन कार्यों को अलग से निष्पादित कर सकते हैं) है।


कंसोल.लॉग आपका दोस्त है .. मैं नोड-इंस्पेक्टर तक पहुंचना पसंद करूंगा, लेकिन मुझे लगता है कि डीबग टूल वी 8 का हिस्सा नहीं हैं। जैसा कि मैं इसे समझता हूं, डिबग टूल अपने आप में एक वेब ऐप है। अगर यहाँ गलत है तो मुझे सही करें क्योंकि मैं वही करना चाहूंगा जो आपका प्रयास है।
iancrowther

हां, लॉगिंग सिस्टम (मेरा मतलब है कि कंसोल.लॉग या अन्य प्रकार के लॉगिंग तंत्र) हमेशा हमारे दोस्त होंगे, लेकिन मुझे जो चाहिए, वह एक अलग और अधिक डिबग करने योग्य तरीका है। अब तक, मुझे अपनी परियोजना के लिए कुछ अनुपलब्ध आवश्यकताएं मिलीं जो कि ग्रंट के साथ हैं इसलिए मैंने अब तक हटा दिया है और मैं नोडज का उपयोग कर रहा हूं क्योंकि यह स्वयं का है इसलिए मैं अब नोड-इंस्पेक्टर का उपयोग करके डीबग कर सकता हूं। मुझे पता है, यह समाधान नहीं है, लेकिन यह काम करता है। मुझे लगता है, भविष्य में, मैं नोड-इंस्पेक्टर और अन्य उपकरणों / सुविधाओं के साथ फिर से ग्रंट जोड़ूंगा। पिछले नहीं बल्कि कम से कम, यह बहुत बढ़िया है! मैं इसे अन्य परियोजनाओं और वास्तव में चट्टानों का उपयोग कर रहा हूं!
जुआनओ

बस ग्रंट के साथ खेलना शुरू किया, उस सवाल में भी दिलचस्पी ...
दिमित्री पश्केविच

@iancrowther, उपकरण वेब निरीक्षक उपयोग V8 में हैं। वहाँ एक परियोजना है node-inspectorजो बातचीत करती है node --debug, जो उस ब्राउज़र को डिबग जानकारी प्रदान करती है जो कनेक्ट करती है। यह बहुत बढ़िया है, क्योंकि आप क्रोम को नोड-इंस्पेक्टर प्रक्रिया से जोड़ सकते हैं, और अपने ऐप को डीबग करने के लिए सभी वेब इंस्पेक्टर टूल का उपयोग कर सकते हैं। github.com/dannycoates/node-inspector
डेविड सूटर

जवाबों:


135

डिबग में ग्रंट चलाने के लिए, आपको ग्रंट स्क्रिप्ट को नोड में स्पष्ट रूप से पास करना होगा:

node-debug $(which grunt) task

और debugger;अपने कार्य में एक पंक्ति लगाएं। node-inspectorफिर डिबगिंग टूल के साथ एक ब्राउज़र खोलेंगे।

28 फरवरी 2014 को संपादित करें

node-inspectorने कमांड को जोड़ा है node-debug, जो एक --debugस्थिति में नोड लॉन्च करता है और node-inspectorपहली debuggerपंक्ति या सेट ब्रेकपॉइंट को हिट करने से रोकते हुए, ब्राउज़र को पेज पर खोलता है ।

30 जनवरी 2015 को संपादित करें

विंडोज पर, चीजें एक स्पर्श अधिक जटिल हैं। निर्देशों के लिए @ e.gluhotorenko से जवाब देखें।


1
यह भी खूब रही। यह विश्व स्तर पर स्थापित एनपीएम डिब्बे पर भी काम करता है।
pllee

1
नोड डिबग $ (जो ग्रंट) कार्य नोडज डिफॉल्ट डिबगर का उपयोग करता है
टॉमस रोमेरो

3
मुझे इससे थोड़ी परेशानी हो रही है। क्या आप स्पष्ट कर सकते हैं कि क्या $(which grunt)है? क्या यह सिर्फ ग्रंटफाइल है।जेएस मैं डिबग करना चाहता हूं? और taskक्या मैं ( serveउदाहरण के रूप में) का उपयोग कर रहा हूं grunt serveया बस serve? मैंने कोशिश की है node-debug Gruntfile.js serveऔर बहुत सारी अन्य चीजें हैं, लेकिन मुझे यह काम करने के लिए नहीं मिल सकता है। नोड-इंस्पेक्टर खुलता है और यह पहली पंक्ति पर टूट जाता है, लेकिन मैं फ़ंक्शन में पहली पंक्ति के रूप में serveएक debugger;पंक्ति डालने पर भी कार्य में नहीं टूट सकता ।
ब्रेट

2
@ फिर, क्या आप विंडोज़ या OSX / लिनक्स पर हैं? यूनिक्स पर, $ (जो ग्रंट) ग्रांट-क्ली grunt.jsस्क्रिप्ट के लिए पूरे रास्ते से बदल दिया जाता है । यही वह स्क्रिप्ट है जो वास्तव में ग्रंट चलाती है। यदि आप खिड़कियों पर हैं, तो grunt-cli स्क्रिप्ट के संभावित स्थान के लिए stackoverflow.com/a/13443026/240358 (इसके नीचे का उत्तर) देखें। यही कारण है कि की जगह लेता है gruntअपने आदेश में - अपने उदाहरण में, की जगह taskके साथserve
डेविड दक्षिण वायु

धन्यवाद @DavidSouther, क्या आप अपने उत्तर में विंडोज़-विशिष्ट भाग जोड़ना चाहते हैं? मुझे वास्तव में सिर्फ लाइनक्स में कदम रखना चाहिए ...
ब्रेट

39

विंडोज समाधान

Daud

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

अपने साथ निर्देशिका में cmd ​​से Gruntfile.jsdebugger;आवश्यक स्थानों पर लाइन लगाना न भूलें ।


3
ग्रन्ट 0.4 ​​के साथ शुरू होने वाला ग्रन्ट एंट्री पॉइंट grunt-cliपैकेज का हिस्सा है :node --debug-brk [..]\node_modules\grunt-cli\bin\grunt
मिस्टेको

4
विंडोज निर्देशों के लिए बहुत बहुत धन्यवाद। शक्तियों में आप इसे थोड़ा कम नाजुक बनाने के लिए टिल्ड का उपयोग कर सकते हैंnode --debug-brk (Resolve-Path ~\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt) taskname
जॉर्ज माउर

यार, मैंने अभी 30 मिनट बिताए हैं और यह पता लगा लिया है और फिर अपने उत्तर को अपडेट कर रहा हूं! मुझे बस नीचे स्क्रॉल करना चाहिए था!
डेविड सूटर

1
एक और कंसोल खोलना और चलाना न भूलेंnode-inspector
valter.santos.matos

@ valter.santos.matos वास्तव में अब यह है कि आप नीचे बताए गए नोड
जैकी

7

डिबग करने के लिए, हमें बिन के तहत ग्रंट फ़ाइल को संशोधित करना होगा। मेरी मशीन पर, वैश्विक रूप से ग्रंट स्थापित है, इसलिए मैं / usr / स्थानीय / lib / node_modules / ग्रंट / बिन पर गया और मैंने फ़ाइल को खोला और संशोधित किया:

#!/usr/bin/env node

सेवा

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

--debug-brk चलाए गए जावास्क्रिप्ट की पहली पंक्ति पर टूट जाएगा।

ऐसा करना अकेले काफी नहीं है, क्योंकि जब से आप नोड इंस्पेक्टर को ड्रॉप डाउन में ग्रन्ट टास्क जेएस फाइल ढूंढने में सक्षम नहीं होंगे, तो आपको उस फाइल को संशोधित करना होगा debugger;जहां आप डीबगिंग में रुचि रखते हैं जहां जोड़कर आप चाहते हैं कि ब्रेकप्वाइंट हो। अब आप पहले ब्रेक के बाद जारी रख सकते हैं, और आप debugger;लाइन पर टूट जाएंगे

बहुत प्यारा, लेकिन यह एकमात्र तरीका है जो मैंने अब तक पाया है।


2
यह अविश्वसनीय रूप से कठिन है, क्योंकि यह / usr / bin / env में विभिन्न प्रकार के व्यवहार पर निर्भर करता है और शेबांग लाइन में # और \ n के बीच अविवादित जादू है।
डेविड सूटर

2
यह मेरे लिए काम नहीं करता है। ग्रंट अभी भी डिबग मोड के बिना चलता है।
यूजीन Gluhotorenko

@DavidSouther Shebangs अनिर्दिष्ट जादू नहीं हैं। वे मानकीकृत हैं POSIX व्यवहार
मील्स राउत

6

मैंने हाल ही में ग्रन्ट-नोड-इंस्पेक्टर को नोड-इंस्पेक्टर को आसानी से अपने बाकी ग्रंट वर्कफ़्लो के साथ कॉन्फ़िगर करने के लिए बनाया है, इसे देखें : https://github.com/ChrisWren/grunt-node-inspector

यहां एक ग्रंटफाइल का एक भाग है, जो बताता है कि आप ग्रंट-नोड-इंस्पेक्टर, ग्रंट-समवर्ती और ग्रंट-शेल का उपयोग करके एक ग्रन्ट कार्य को कैसे डीबग कर सकते हैं: https://github.com/CabinJS/CabinJ-blob/master/Gruntfile। js # L44-L77


आप सोच रहे हैं, node --debug-brk $(which grunt) node-inspector build testबात की तरह चलाने ? मुझे वह पसंद है।
डेविड सोथर

बहुत ज्यादा, सिवाय इसके कि मैं समवर्ती का उपयोग करता हूं, क्योंकि node-inspectorबाहर निकलने और अनुमति नहीं देगा buildऔर testजब से यह हमेशा के लिए चलता है। मैंने एक स्निपेट के लिए एक लिंक जोड़ा जहां मेरे पास यह सेटअप है।
क्रिसव्रेन

हम्म। दूसरे विचार पर ... मेरे वर्कफ़्लो ने मुझे अभी शुरू किया है node-inspector &, इसे पृष्ठभूमि में छोड़ दिया है, और इसे किया है। उस के बारे में तुम्हारा कोई विचार?
डेविड सूटर 14

1
यकीन नहीं क्यों, लेकिन यह मेरे लिए काम नहीं करता है। मैं कमांड चलाता हूं grunt node-inspectorऔर फिर लोकलहोस्ट यूआरएल पर जाता हूं और मुझे कोई सोर्स फाइल्स नहीं दिखती हैं। बस खाली डिबगर उपकरण।
क्रिस होलेनबेक

मैं दो अलग-अलग कमांड चलाकर स्रोत दिखाने में कामयाब रहा। grunt node-inspectorऔर node --debug-brk Gruntfile.jsमेरी ग्रन्ट डायरेक्टरी से। हालाँकि जब मैंने ग्रन्ट फ़ाइल में एक ब्रेकपॉइंट सेट किया तो यह सिर्फ एक कनेक्शन त्रुटि के साथ क्रैश हो जाता है।
क्रिश होलेनबेक

4

मैंने अपना ऐप चलाने और नोड-इंस्पेक्टर लॉन्च करने के लिए एक कार्य किया है। यह वर्तमान प्रस्ताव से कहीं बेहतर है, आपको बस इस कार्य को ग्रंटफाइल में जोड़ना होगा:

  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
ग्रंट-नोड-इंस्पेक्टर के लेखक के पास यह अधिकार है। यह समाधान केवल पॉज़िक्स वातावरण पर काम करता है जबकि नोड-इंस्पेक्टर को कॉन्फ़िगर करना आसान है और समवर्ती के साथ पॉज़िक्स और विंडोज़ पर काम करता है।
बारिशबा

3

शानदार जवाब यहाँ। 2017 में, अब आप कर सकते हैं

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 को क्रोम में खोलें, और आप जाने के लिए अच्छे हैं!

मैं एनओडी 7.3.0 का उपयोग कर रहा हूं और मैं मैक पर हूं। इसे विंडोज पर लाने के लिए आपको अन्य पोस्ट में कुछ सलाह का पालन करना पड़ सकता है।


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
    }
  ]
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.