Menggunakan node-inspector dengan tugas Grunt

101

Apakah seseorang menggunakan node-inspector dengan Grunt untuk debugging aplikasi? Jika tidak, Dapatkah Anda merekomendasikan alat debugging untuk aplikasi berbasis Grunt?

Saya bekerja dengan nodejs untuk aplikasi sisi server dan saya memiliki Grunt untuk menggunakan tugas terpisah (ini karena pengguna dapat menjalankan tugas secara terpisah).

JuanO
sumber
console.log adalah teman Anda .. Saya ingin mengakses node-inspector, tetapi menurut saya alat debug bukan bagian dari V8. Seperti yang saya pahami, alat debug adalah aplikasi web dalam dirinya sendiri. Koreksi saya jika saya salah di sini karena saya ingin melakukan apa yang Anda coba.
iancrowther
Ya, sistem logging (maksud saya console.log atau mekanisme logging lainnya) akan selalu menjadi teman kita, tetapi yang saya butuhkan, adalah cara yang berbeda dan lebih dapat di-debug. Sekarang, saya menemukan beberapa persyaratan yang hilang untuk proyek saya dengan grunt jadi saya sudah menghapusnya sekarang dan saya menggunakan nodejs sebagai miliknya sehingga saya dapat men-debug menggunakan node-inspector sekarang. Saya tahu, ini bukan solusinya, tetapi berhasil. Saya pikir, di masa depan, saya akan menambahkan grunt lagi dengan node-inspector dan alat / fitur lain yang ditambahkan. Last but not least, mendengus itu luar biasa! Saya menggunakannya di proyek lain dan benar-benar keren!
JuanO
Baru saja mulai bermain-main dengan Grunt, juga tertarik dengan pertanyaan itu ...
Dmitry Pashkevich
@iancrowther, alat yang digunakan inspektur web ada di V8. Ada sebuah proyek bernama node-inspectoryang berbicara dengan node --debug, memberikan info debug ke browser yang terhubung. Ini luar biasa, karena Anda kemudian dapat menghubungkan Chrome ke proses node-inspector, dan menggunakan semua alat web inspector untuk men-debug aplikasi Anda. github.com/dannycoates/node-inspector
David Souther

Jawaban:

135

Untuk menjalankan grunt di debug, Anda harus meneruskan skrip grunt ke node secara eksplisit:

node-debug $(which grunt) task

dan beri debugger;garis dalam tugas Anda. node-inspectorkemudian akan membuka browser dengan alat debugging.

Edit 28 Feb 2014

node-inspectortelah menambahkan perintah node-debug, yang meluncurkan node dalam --debugkeadaan dan membuka browser ke node-inspectorhalaman, berhenti saat mencapai debuggerbaris pertama atau menyetel breakpoint.

Edit 30 Januari 2015

Di Windows, segalanya menjadi lebih rumit. Lihat jawaban dari @ e.gluhotorenko untuk petunjuk.

David Souther
sumber
1
Ini bagus. Ini juga berfungsi pada npm bins yang dipasang secara global lainnya.
pllee
1
node debug $ (yang mendengus) tugas menggunakan debugger default nodejs
Tomas Romero
3
Saya mengalami sedikit masalah dengan ini. Bisakah Anda menjelaskan apa $(which grunt)itu? Apakah hanya Gruntfile.js yang ingin saya debug? Dan taskapakah saya menempatkan (menggunakan servesebagai contoh) grunt serveatau hanya serve? Saya telah mencoba node-debug Gruntfile.js servedan banyak hal lain tetapi saya tidak bisa membuatnya bekerja. Node-inspector terbuka dan rusak di baris pertama, tetapi saya tidak dapat masuk ke servetugas bahkan jika saya meletakkan debugger;baris sebagai baris pertama fungsi.
Brett
2
@brett, apakah Anda menggunakan windows atau OSX / Linux? Pada unix, $ (which grunt) diganti dengan path lengkap ke grunt.jsskrip grunt-cli . Itu adalah skrip yang menjalankan Grunt. Jika Anda menggunakan windows, lihat stackoverflow.com/a/13443026/240358 (jawaban di bawah ini) untuk kemungkinan lokasi skrip grunt-cli. Itu menggantikan gruntdalam perintah Anda - dalam contoh Anda, ganti taskdenganserve
David Souther
Terima kasih @DavidSouther, apakah Anda ingin menambahkan bagian khusus windows ke jawaban Anda? Saya benar-benar harus pindah ke linux ...
Brett
39

Solusi Windows

Lari

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

dari cmd di direktori dengan Anda Gruntfile.js. Jangan lupa memberi debugger;garis di tempat yang diperlukan.

Eugene Gluhotorenko
sumber
3
Dimulai dengan grunt 0,4 titik masuk kasar adalah bagian dari grunt-clipaket:node --debug-brk [..]\node_modules\grunt-cli\bin\grunt
mistaecko
4
Terima kasih banyak atas instruksi Windows. Di PowerShell Anda dapat menggunakan tilde untuk membuatnya sedikit lebih rapuhnode --debug-brk (Resolve-Path ~\AppData\Roaming\npm\node_modules\grunt-cli\bin\grunt) taskname
George Mauer
Sobat, saya hanya menghabiskan 30 menit untuk mencari tahu lalu memperbarui jawaban saya! Saya seharusnya menggulir ke bawah!
David Souther
1
Jangan lupa untuk membuka konsol lain dan jalankannode-inspector
valter.santos.matos
@ valter.santos.matos sebenarnya sekarang Anda harus menggunakan node --inspect yang disebutkan di bawah
Jackie
7

Untuk men-debug, kita harus memodifikasi file grunt di bawah bin. Di mesin saya, grunt diinstal secara global, jadi saya pergi ke / usr / local / lib / node_modules / grunt / bin Saya membuka file dan memodifikasi:

#!/usr/bin/env node

Untuk

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

--debug-brk akan berhenti di baris pertama javascript yang dijalankan.

Melakukan itu saja tidak cukup, karena Anda tidak akan dapat menemukan file js task grunt di drop down di node inspector, jadi Anda harus memodifikasi file yang ingin Anda debug dengan menambahkan debugger;where. Anda ingin breakpoint terjadi. Sekarang Anda dapat mengklik lanjutkan setelah jeda pertama, dan Anda akan memutuskan debugger;baris Anda

Cukup kotor, tapi itu satu-satunya cara yang saya temukan sejauh ini.

pengguna1577390
sumber
2
Ini sangat rumit, karena bergantung pada berbagai perilaku di / usr / bin / env dan sihir tak berdokumen antara # dan \ n di baris shebang.
David Souther
2
Itu tidak berhasil untuk saya. Grunt masih berjalan tanpa mode debug.
Eugene Gluhotorenko
@DividSurabaya bukanlah sihir tak berdokumen. Mereka adalah perilaku POSIX standar
Miles Rout
6

Saya baru-baru ini membuat grunt-node-inspector untuk dengan mudah mengkonfigurasi node-inspector dengan sisa alur kerja grunt Anda, lihat: https://github.com/ChrisWren/grunt-node-inspector

Berikut adalah bagian dari Gruntfile yang menggambarkan bagaimana Anda dapat men-debug tugas grunt menggunakan grunt-node-inspector, grunt-concurrent, dan grunt-shell: https://github.com/CabinJS/Cabin/blob/master/Gruntfile. js # L44-L77

ChrisWren
sumber
Anda berpikir, menjalankan node --debug-brk $(which grunt) node-inspector build testsemacam itu? Aku suka itu.
David Souther
Cukup banyak, kecuali saya menggunakan konkuren, karena node-inspectortidak akan keluar dan mengizinkan builddan testberjalan karena berjalan selamanya. Saya menambahkan tautan ke cuplikan tempat saya menyiapkannya.
ChrisWren
Hmm. Setelah dipikir-pikir ... alur kerja saya baru saja dimulai node-inspector &, meninggalkannya di latar belakang, dan menghentikannya. Ada pendapatmu tentang itu?
David Souther
1
Tidak yakin mengapa, tapi ini sepertinya tidak berhasil untuk saya. Saya menjalankan perintah grunt node-inspectordan kemudian pergi ke url localhost dan saya tidak melihat file sumber. Hanya alat debugger kosong.
Kris Hollenbeck
Saya berhasil menampilkan sumber dengan menjalankan dua perintah terpisah. grunt node-inspectordan node --debug-brk Gruntfile.jsdari direktori grunt saya. Namun ketika saya mengatur breakpoint di file grunt itu hanya crash dengan kesalahan koneksi.
Kris Hollenbeck
4

Saya telah melakukan tugas untuk menjalankan aplikasi saya dan meluncurkan node-inspector. Ini jauh lebih baik daripada proposisi saat ini, Anda hanya perlu menambahkan tugas ini di 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');
    });
olivier dufour
sumber
1
Penulis grunt-node-inspector benar. Solusi ini hanya bekerja pada lingkungan posix sementara itu lebih mudah untuk mengkonfigurasi node-inspector dan secara bersamaan, bekerja pada posix dan windows.
rainabba
3

Jawaban bagus di sini. Di 2017, sekarang Anda bisa melakukannya

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

Yang mencetak sesuatu seperti.

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

Buka URL itu di chrome, dan Anda siap melakukannya!

Saya menggunakan Node 7.3.0 dan saya menggunakan Mac. Anda mungkin harus mengikuti beberapa saran di posting lain untuk menjalankannya di Windows.

RoccoB
sumber
2

Pembaruan 2019

  • Jika Anda ingin meluncurkan tugas kasar dalam mode debug dan berhenti di baris pertama:

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

  • Jika Anda ingin meluncurkan tugas grunt dalam mode debug di port tertentu:

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

  • jika Anda ingin melampirkan VSCODE ke proses node yang menjalankan sesi debugging grunt, gunakan konfigurasi berikut di 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
    }
  ]
}

ZEE
sumber