Fantastico modulo della community

debug

Stato build Stato di copertura Slack OpenCollective OpenCollective

Una piccola utility di debug JavaScript modellata sulla tecnica di debug del core di Node.js. Funziona con Node.js e browser web.

Installazione

1
$ npm install debug

Utilizzo

debug espone una funzione; passa semplicemente a questa funzione il nome del tuo modulo e restituirà una versione decorata di console.error a cui passare le istruzioni di debug. Ciò ti consentirà di attivare o disattivare l'output di debug per le diverse parti del modulo come così come il modulo nel suo insieme.

Esempio app.js :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
var debug = require('debug')('http') , http = require('http') , name = 'My App'; // fake app debug('booting %o', name); http.createServer(function(req, res){ debug(req.method + ' ' + req.url); res.end('hello\n'); }).listen(3000, function(){ debug('listening'); }); // fake worker of some kind require('./worker');

Esempio worker.js :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
var a = require('debug')('worker:a') , b = require('debug')('worker:b'); function work() { a('doing lots of uninteresting work'); setTimeout(work, Math.random() * 1000); } work(); function workb() { b('doing some work'); setTimeout(workb, Math.random() * 2000); } workb();

La variabile d'ambiente DEBUG viene quindi utilizzata per abilitarli in base a spazi o nomi delimitati da virgole.

Ecco alcuni esempi:

screenshot 08/08/2017 alle 12 53 04 pmscreenshot 08/08/2017 alle 12 53 38 pmscreenshot 2017-08-08 alle 12 53 25 pm

Nota di Windows

Su Windows la variabile d'ambiente viene impostata utilizzando il comando set .

1
set DEBUG=*,-not_this

Tieni presente che PowerShell utilizza una sintassi diversa per impostare le variabili di ambiente.

1
$env:DEBUG = "*,-not_this"

Quindi, esegui il programma di cui eseguire il debug come al solito.

Colori spazio dei nomi

Ogni istanza di debug ha un colore generato per essa in base al nome dello spazio dei nomi. Ciò aiuta quando si analizza visivamente l'output di debug per identificare a quale istanza di debug appartiene una riga di debug.

Node.js

In Node.js, i colori vengono attivate quando stderr è un TTY. È inoltre necessario installare il supports-color modulo a fianco di debug, altrimenti il debug utilizza solo una piccola manciata di colori di base.

Programma di navigazione in rete

I colori sono abilitati anche su "Web Inspector" che comprendono l'opzione di formattazione %c . Si tratta di Web Inspector WebKit, Firefox ( dalla versione 31 ) e il plug-in Firebug per Firefox (qualsiasi versione).

Differenza di millisecondi

Quando si sviluppa attivamente un'applicazione può essere utile vedere quando il tempo trascorso tra una chiamata debug() e la successiva. Supponiamo, ad esempio, di invocare debug() prima di richiedere una risorsa, e anche dopo, "+ NNNms" mostrerà quanto tempo è stato trascorso tra le chiamate.

Quando stdout non è un TTY, viene utilizzato Date#toISOString() , rendendolo più utile per registrare le informazioni di debug come mostrato di seguito:

Convegni

Se lo stai utilizzando in una o più delle tue librerie, dovresti usare il nome della tua libreria in modo che gli sviluppatori possano attivare il debug come desiderato senza indovinare i nomi. Se hai più di un debugger dovresti anteporre il nome della tua libreria e usa ":" per separare le funzionalità. Ad esempio "bodyParser" da Connect sarebbe quindi "connect: bodyParser". Se aggiungi un "*" alla fine del tuo nome, sarà sempre abilitato indipendentemente dall'impostazione del DEBUG variabile d'ambiente, è quindi possibile utilizzarla per l'output normale e per l'output di debug.

Caratteri jolly

Il carattere * può essere usato come carattere jolly. Supponiamo, ad esempio, che la tua libreria abbia dei debugger denominati "connect: bodyParser", "connect: compress", "connect: session", invece di elencarli tutti e tre con DEBUG=connect:bodyParser,connect:compress,connect:session , puoi semplicemente fare DEBUG=connect:* , o per eseguire tutto usando questo modulo usa semplicemente DEBUG=* .

Puoi anche escludere debugger specifici anteponendoli a un carattere "-". Ad esempio, DEBUG=*,-connect:* includerebbe tutti i debugger tranne quelli che iniziano con "connect:".

variabili ambientali

Quando si esegue Node.js, è possibile impostare alcune variabili di ambiente che cambieranno il comportamento della registrazione del debug:

Nome Scopo
DEBUG Abilita / disabilita specifici spazi dei nomi di debug.
DEBUG_HIDE_DATE Nascondi la data dall'output di debug (non TTY).
DEBUG_COLORS Se utilizzare o meno i colori nell'output di debug.
DEBUG_DEPTH Profondità di ispezione degli oggetti.
DEBUG_SHOW_HIDDEN Mostra le proprietà nascoste sugli oggetti ispezionati.

Nota: le variabili di ambiente che iniziano con DEBUG_ finiscono per essere convertite in un oggetto Opzioni che viene utilizzato con i formattatori %o / %O Vedere la documentazione di Node.js per util.inspect() per l'elenco completo.

Formattatori

Il debug utilizza la formattazione in stile printf . Di seguito sono riportati i formattatori ufficialmente supportati:

Formatter Rappresentazione
%O Stampa graziosamente un oggetto su più righe.
%o Stampa graziosamente un oggetto tutto su una singola riga.
%s Corda.
%d Numero (sia intero che float).
%j JSON. Sostituita con la stringa "[Circular]" se l'argomento contiene riferimenti circolari.
%% Singolo segno di percentuale ("%"). Non utilizza argomenti.

Custom formatters

Puoi aggiungere formattatori personalizzati estendendo l'oggetto debug.formatters . Ad esempio, se desideri aggiungere il supporto per il rendering di un buffer come esadecimale con %h , potresti fare qualcosa come:

1 2 3 4 5 6 7 8 9
const createDebug = require('debug') createDebug.formatters.h = (v) => { return v.toString('hex') } // …elsewhere const debug = createDebug('foo') debug('this is hex: %h', new Buffer('hello world')) // foo this is hex: 68656c6c6f20776f726c6421 +0ms

Supporto browser

È possibile costruire uno script del browser-ready con browserify , o semplicemente utilizzare il browserify-as-a-service di compilazione , se non si vuole costruire da soli.

Lo stato di abilitazione del debug è attualmente mantenuto da localStorage . Considera la situazione mostrata di seguito in cui hai worker:a e worker:b e desideri eseguire il debug di entrambi. Puoi abilitarlo utilizzando localStorage.debug :

1
localStorage.debug = 'worker:*'

E poi aggiorna la pagina.

1 2 3 4 5 6 7 8 9 10
a = debug('worker:a'); b = debug('worker:b'); setInterval(function(){ a('doing some work'); }, 1000); setInterval(function(){ b('doing some work'); }, 1200);

Flussi di output

Per impostazione predefinita, il debug verrà registrato su stderr, tuttavia questo può essere configurato per spazio dei nomi sovrascrivendo il metodo di log :

Esempio stdout.js :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
var debug = require('debug'); var error = debug('app:error'); // by default stderr is used error('goes to stderr!'); var log = debug('app:log'); // set this namespace to log via console.log log.log = console.log.bind(console); // don't forget to bind to console! log('goes to stdout'); error('still goes to stderr!'); // set all output to go via console.info // overrides all per-namespace log settings debug.log = console.info.bind(console); error('now goes to stdout via console.info'); log('still goes to stdout, but via console.info now');

Imposta dinamicamente

Puoi anche abilitare il debug dinamicamente chiamando il metodo enable() :

1 2 3 4 5 6 7 8 9 10
let debug = require('debug'); console.log(1, debug.enabled('test')); debug.enable('test'); console.log(2, debug.enabled('test')); debug.disable(); console.log(3, debug.enabled('test'));

Stampa:

1 2 3
1 false 2 true 3 false

Utilizzo:
enable(namespaces)
namespaces possono includere modalità separate da due punti e caratteri jolly.

Nota che la chiamata ad enable() sovrascrive completamente la variabile DEBUG precedentemente impostata:

1 2
$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))' => false

Verifica se una destinazione di debug è abilitata

Dopo aver creato un'istanza di debug, puoi determinare se è abilitata o meno controllando la proprietà enabled :

1 2 3 4 5
const debug = require('debug')('http'); if (debug.enabled) { // do stuff... }

È anche possibile attivare manualmente questa proprietà per forzare l'abilitazione o la disabilitazione dell'istanza di debug.

Autori

  • TJ Holowaychuk
  • Nathan Rajlich
  • Andrew Rhyne

Sostenitori

Sostienici con una donazione mensile e aiutaci a continuare le nostre attività. [ Diventa un sostenitore ]

Sponsor

Diventa uno sponsor e ottieni il tuo logo nel nostro README su Github con un link al tuo sito. [ Diventa uno sponsor ]

Licenza

(La licenza MIT)

Copyright (c) 2014-2017 TJ Holowaychuk < tj@vision-media.ca >

Con la presente viene concessa l'autorizzazione, a titolo gratuito, a chiunque ottenga una copia di questo software e dei file di documentazione associati (il 'Software'), di trattare il Software senza limitazioni, inclusi, senza limitazione, i diritti di utilizzo, copia, modifica, unione , pubblicare, distribuire, concedere in licenza e / o vendere copie del Software e consentire alle persone a cui il Software è fornito di farlo, alle seguenti condizioni:

L'avviso di copyright di cui sopra e questo avviso di autorizzazione devono essere inclusi in tutte le copie o parti sostanziali del Software.

IL SOFTWARE VIENE FORNITO "COSÌ COM'È", SENZA ALCUN TIPO DI GARANZIA, ESPLICITA O IMPLICITA, INCLUSE, MA NON SOLO, LE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ PER UNO SCOPO PARTICOLARE E NON VIOLAZIONE. IN NESSUN CASO GLI AUTORI O COPYRIGHT PER I TITOLARI RECLAMI, DANNI O ALTRE RESPONSABILITÀ, SIA IN AZIONE DI CONTRATTO, TORTO O ALTRO, DERIVANTI DAL, DAL O IN CONNESSIONE AL SOFTWARE O ALL'USO O ALTRI TRATTAMENTI DEL SOFTWARE.