Fantastico modulo comunitario

mettere a punto

Stato build Stato di copertura allentato OpenCollective OpenCollective

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

Installazione

1
$ npm install debug

uso

debug espone una funzione; è sufficiente passare questa funzione al nome del modulo e restituirà una versione decorata di console.error per il passaggio delle istruzioni di debug. Ciò consentirà di attivare / disattivare l'output di debug per 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 di ambiente DEBUG viene quindi utilizzata per abilitarli in base allo spazio o ai nomi delimitati da virgole.

Ecco alcuni esempi:

schermata 08-08-2017 alle 12 53 04 pmschermata 08-08-2017 alle 12 53 38 pmschermata 08-08-2017 alle 12 53 25 pm

Nota di Windows

Su Windows la variabile d'ambiente è impostata usando il comando set .

1
set DEBUG=*,-not_this

Si noti che PowerShell utilizza una sintassi diversa per impostare le variabili di ambiente.

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

Quindi, eseguire il programma per il debug come al solito.

Colori dello spazio dei nomi

Ogni istanza di debug ha un colore generato per essa in base al nome del suo spazio dei nomi, che aiuta quando analizza visivamente l'output di debug per identificare a quale istanza di debug appartiene una linea di debug.

Node.js

In Node.js i colori sono abilitati quando stderr è un TTY, inoltre è necessario installare il modulo supports-color insieme al debug, altrimenti il ​​debug utilizzerà solo una manciata di colori di base.

Programma di navigazione in rete

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

Millisecondo diff

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

Quando stdout non è un TTY, viene utilizzato Date#toISOString() , rendendolo più utile per la registrazione delle 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 aggiungere il prefisso con il nome della tua libreria e usa ":" per separare le funzionalità. Ad esempio "bodyParser" da Connect sarebbe "connect: bodyParser". Se aggiungi un "*" alla fine del tuo nome, sarà sempre abilitato indipendentemente dall'impostazione del DEBUG variabile di ambiente, quindi è possibile utilizzarlo per l'output normale e per l'output di debug.

I caratteri jolly

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

È inoltre possibile escludere debugger specifici anteponendoli con 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 modificheranno il comportamento della registrazione di debug:

Nome Scopo
DEBUG Abilita / disabilita spazi dei nomi specifici per il debug.
DEBUG_HIDE_DATE Nascondi data dall'output di debug (non TTY).
DEBUG_COLORS Se utilizzare o meno i colori nell'output di debug.
DEBUG_DEPTH Profondità di ispezione dell'oggetto.
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 Options 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 piuttosto un oggetto su più righe.
%o Stampa piuttosto un oggetto tutto su una sola riga.
%s Corda.
%d Numero (sia intero che mobile).
%j JSON Sostituito con la stringa "[Circular]" se l'argomento contiene riferimenti circolari.
%% Segno di percentuale singolo ('%'). Questo non consuma un argomento.

Custom formatters

È possibile aggiungere formattatori personalizzati estendendo l'oggetto debug.formatters . Ad esempio, se si desidera aggiungere il supporto per il rendering di un buffer come esadecimale con %h , è possibile fare qualcosa del tipo:

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 per il 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 persistito 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 usando localStorage.debug :

1
localStorage.debug = 'worker:*'

E quindi 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 accederà a stderr, tuttavia questo può essere configurato per spazio dei nomi sostituendo 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');

Impostato dinamicamente

È inoltre possibile abilitare il debug in modo dinamico 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

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

Si noti che la chiamata di enable() sostituisce 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, è possibile determinare se è abilitata o meno controllando la proprietà enabled :

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

È inoltre possibile attivare o disattivare manualmente questa proprietà per forzare l'attivazione o la disattivazione dell'istanza di debug.

autori

  • TJ Holowaychuk
  • Nathan Rajlich
  • Andrew Rhyne

I 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 sul 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 >

L'autorizzazione è concessa, gratuitamente, a chiunque ottenga una copia di questo software e dei file di documentazione associati (il "Software"), per trattare il Software senza restrizioni, inclusi senza limitazione i diritti di utilizzo, copia, modifica, unione , pubblicare, distribuire, concedere in licenza e / o vendere copie del Software e per consentire alle persone a cui il Software è fornito di farlo, fatte salve le 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 È FORNITO "COSÌ COM'È", SENZA ALCUN TIPO DI GARANZIA, ESPRESSA O IMPLICITA, COMPRESO MA NON LIMITATO ALLE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ PER UNO SCOPO PARTICOLARE E SENZA PREOCCUPAZIONE. RECLAMI, DANNI O ALTRE RESPONSABILITÀ, SE IN AZIONE DI CONTRATTO, TORT O ALTRO, DERIVANTE DA, FUORI O IN CONNESSIONE CON IL SOFTWARE O L'UTILIZZO O ALTRE OFFERTE NEL SOFTWARE.