Grunt görevleriyle düğüm denetçisini kullanma


101

Birisi uygulama hata ayıklaması için Grunt ile düğüm denetçisini kullanıyor mu? Değilse, Grunt tabanlı uygulamalar için bir hata ayıklama aracı önerebilir misiniz?

Ben ile çalışıyorum nodejs bir sunucu tarafı uygulaması için ve ben Grunt ayrı görevleri kullanmak (kullanıcılar ayrı ayrı görevleri yürütmek çünkü bu).


console.log senin arkadaşın .. Node-inspector'a erişmek isterim, ancak hata ayıklama araçlarının V8'in bir parçası olmadığını düşünüyorum. Anladığım kadarıyla, hata ayıklama araçları kendi başlarına bir web uygulamasıdır. Burada yanılıyorsam düzelt çünkü senin girişimini yapmak istiyorum.
iancrowther

Evet, loglama sistemi (console.log veya başka bir tür loglama mekanizması) her zaman dostumuz olacak, ancak ihtiyacım olan şey farklı ve daha hata ayıklanabilir bir yol. Şimdiye kadar, projemde grunt ile bazı eksik gereksinimler buldum, bu yüzden şimdiye kadar kaldırdım ve kendi olarak nodejs kullanıyorum, böylece şimdi node-inspector kullanarak hata ayıklayabilirim. Biliyorum, çözüm değil ama işe yarıyor. Sanırım gelecekte düğüm müfettişi ve eklenen diğer araçlar / özellikler ile tekrar grunt ekleyeceğim. Son fakat en az değil, homurdanma bu harika! Başka projelerde kullanıyorum ve gerçekten harika!
Juan

Grunt ile oynamaya başladım, bu soruyla da ilgileniyordum ...
Dmitry Pashkevich

@iancrowther, web denetçisinin kullandığı araçlar V8'de. Bağlanan bir tarayıcıya hata ayıklama bilgisi sağlayan, node-inspectorkonuşan bir proje var node --debug. Bu harika, çünkü daha sonra Chrome'u düğüm denetleyici sürecine bağlayabilir ve uygulamanızda hata ayıklamak için tüm web denetçisi araçlarını kullanabilirsiniz. github.com/dannycoates/node-inspector
David Souther

Yanıtlar:


135

Hata ayıklamada grunt çalıştırmak için grunt komut dosyasını açıkça düğüme iletmeniz gerekir:

node-debug $(which grunt) task

ve debugger;görevinize bir çizgi koyun . node-inspectordaha sonra hata ayıklama araçları içeren bir tarayıcı açacaktır.

28 Şub 2014 Düzenle

node-inspector, node-debugdüğümü bir --debugdurumda başlatan ve tarayıcıyı node-inspectorsayfaya açan , ilk debuggersatıra ulaştığında durduran veya kesme noktasını ayarlayan komutu ekledi .

30 Ocak 2015

Windows'ta işler biraz daha karmaşıktır. Talimatlar için @ Örnhotorenko'nun cevabına bakın.


1
Bu harika. Aynı zamanda diğer küresel olarak kurulmuş npm kutuları üzerinde de çalışır.
pllee

1
düğüm hata ayıklama $ (hangi grunt) görevi nodejs varsayılan hata ayıklayıcısını kullanıyor
Tomas Romero

3
Bununla biraz sorun yaşıyorum. Ne olduğunu açıklayabilir misin $(which grunt)? Hata ayıklamak istediğim yalnızca Gruntfile.js mi? Ve task( serveörnek olarak kullanarak ) mı grunt serveyoksa sadece servemi koyuyorum ? Daha node-debug Gruntfile.js servepek çok şeyi denedim ama bunu yapamıyorum. Düğüm denetçisi açılıyor ve ilk satırda kırılıyor, ancak işlevin ilk satırı olarak servebir debugger;satır koysam bile göreve giremiyorum .
Brett

2
@brett, Windows'ta mısınız yoksa OSX / Linux mu? Unix'te, $ (hangi grunt), grunt-cli grunt.jsbetiğinin tam yolu ile değiştirilir . Grunt'ı çalıştıran betik budur. Windows kullanıyorsanız, grunt-cli komut dosyasının olası bir konumu için stackoverflow.com/a/13443026/240358 adresine (bunun altındaki yanıt) bakın. Yani yerini alan gruntkomutunuza - sizin örnekte, yerini taskileserve
David Souther

Teşekkürler @DavidSouther, cevabınıza pencereye özgü kısmı eklemek ister misiniz? Gerçekten Linux'a geçmeliyim ...
Brett

39

Windows çözümü

Çalıştırmak

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

dizindeki cmd'den Gruntfile.js. debugger;Gerekli yerlere sıra koymayı unutmayınız .


3
0.4 homurtu ile başlayan grunt giriş noktası grunt-clipaketin bir parçasıdır :node --debug-brk [..]\node_modules\grunt-cli\bin\grunt
mistaecko

4
Windows talimatları için çok teşekkür ederim. Powershell'de bunu biraz daha az kırılgan hale getirmek için tilde kullanabilirsiniznode --debug-brk (Resolve-Path ~\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt) taskname
George Mauer

Dostum, bunu çözmek için 30 dakika harcadım ve ardından cevabımı güncelledim! Sadece aşağı kaydırmalıydım!
David Souther

1
Başka bir konsol açıp çalıştırmayı unutmayınnode-inspector
valter.santos.matos

@ valter.santos.matos aslında şu anda düğümü kullanmalısınız
Jackie

7

Hata ayıklamak için, bin altındaki grunt dosyasını değiştirmeliyiz. Makinemde grunt global olarak kurulu, bu yüzden / usr / local / lib / node_modules / grunt / bin adresine gittim Dosyayı açtım ve değiştirdim:

#!/usr/bin/env node

İçin

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

--debug-brk, javascript ran'ın ilk satırında kırılacaktır.

Bunu tek başına yapmak yeterli değil, çünkü düğüm denetçisindeki açılır menüde grunt task js dosyasını bulamayacaksın, bu yüzden hata ayıklamakla ilgilendiğin dosyayı debugger;nerede ekleyerek değiştirmelisin kesme noktasının gerçekleşmesini istiyorsunuz. Artık ilk aradan sonra devam et'i tıklayabilirsiniz ve ara vereceksiniz.debugger; hattınızı

Oldukça garip, ama şimdiye kadar bulduğum tek yol bu.


2
/ Usr / bin / env içindeki çeşitli davranışlara ve shebang satırında # ve \ n arasındaki belgelenmemiş sihire dayandığı için bu inanılmaz derecede karışıktır.
David Souther

2
Benim için çalışmıyor. Grunt hala hata ayıklama modu olmadan çalışıyor.
Eugene Gluhotorenko

@DavidSouther Shebangs belgelenmemiş sihir değildir. Standartlaştırılmış POSIX davranışı
Miles Rout

6

Kısa süre önce grunt-node-inspector'ı, grunt iş akışınızın geri kalanıyla kolayca yapılandırmak için grunt-node-inspector'ı oluşturdum, kontrol edin: https://github.com/ChrisWren/grunt-node-inspector

Grunt-node-inspector, grunt-concurrent ve grunt-shell kullanarak bir grunt görevinde nasıl hata ayıklayabileceğinizi gösteren bir Gruntfile bölümü: https://github.com/CabinJS/Cabin/blob/master/Gruntfile. js # L44-L77


Düşünüyorsun, bir node --debug-brk $(which grunt) node-inspector build testçeşit şey mi çalıştırıyorsun ? Bunu sevdim.
David Souther

Hemen hemen, eşzamanlı kullanmam dışında, çünkü sonsuza kadar çalıştığı için node-inspectorçıkıp izin vermeyecek buildve testçalışmayacaktır. Kurulumunu yaptığım bir snippet'e bağlantı ekledim.
ChrisWren

Hmm. İkinci olarak düşündüğümde ... iş akışım beni daha yeni başlattı node-inspector &, arka planda bıraktı ve bitti diye çağırdı. Bununla ilgili düşüncelerin var mı?
David Souther

1
Neden olduğundan emin değilim ama bu bende işe yaramıyor gibi görünüyor. Komutu çalıştırıyorum grunt node-inspectorve ardından localhost url'sine gidiyorum ve kaynak dosyası göremiyorum. Sadece boş hata ayıklayıcı araçları.
Kris Hollenbeck

İki ayrı komut çalıştırarak kaynağın gösterilmesini sağladım. grunt node-inspectorve node --debug-brk Gruntfile.jsgrunt rehberimden. Ancak grunt dosyasında bir kesme noktası belirlediğimde, yalnızca bir bağlantı hatasıyla çöküyor.
Kris Hollenbeck

4

Uygulamamı çalıştırmak ve node-inspector'ı başlatmak için bir görev yaptım. Mevcut önermeden çok daha iyi, sadece bu görevi gruntfile'a eklemelisiniz:

  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'ın yazarı haklı. Bu çözüm yalnızca posix ortamlarında çalışırken, düğüm denetçisinin yapılandırılması daha kolaydır ve eşzamanlı olarak posix ve pencerelerde çalışır.
rainabba

3

Burada harika cevaplar. 2017'de şimdi yapabilirsiniz

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

Hangi gibi bir şey yazdırır.

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

Bu URL'yi Chrome'da açın ve gitmeniz iyi olur!

Düğüm 7.3.0 kullanıyorum ve Mac kullanıyorum. Windows'ta devam ettirmek için diğer gönderilerdeki bazı tavsiyeleri takip etmeniz gerekebilir.


2

2019 güncellemesi

  • Grunt görevini hata ayıklama modunda başlatmak ve ilk satırda kırmak istiyorsanız:

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

  • Grunt görevini belirli bir bağlantı noktasında hata ayıklama modunda başlatmak istiyorsanız:

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

  • grunt hata ayıklama oturumunu çalıştıran düğüm işlemine VSCODE eklemek istiyorsanız, vscode'da aşağıdaki yapılandırmayı kullanın:

{
  // 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
    }
  ]
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.