Mòdul comunitari fantàstic

depurar

Estat de construcció Estat de cobertura Fluix OpenCollective OpenCollective

Una petita utilitat de depuració de JavaScript basada en la tècnica de depuració del nucli de Node.js. Funciona amb Node.js i navegadors web.

Instal·lació

1
$ npm install debug

Ús

debugexposa una funció; només cal que passeu a aquesta funció el nom del vostre mòdul i us retornarà una versió decorada per console.errora què us passiu les declaracions de depuració. Això us permetrà canviar la sortida de depuració per a diferents parts del vostre mòdul, així com el mòdul. com un tot.

Exemple 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');

Exemple 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();

Aleshores, la DEBUGvariable d'entorn s'utilitza per habilitar-les en funció d'espais o noms delimitats per comes.

Aquests són alguns exemples:

captura de pantalla 2017-08-08 a les 12 53 04 p. m captura de pantalla 2017-08-08 a les 12 53 38 pm captura de pantalla 2017-08-08 a les 12 53 25 pm

Nota de Windows

A Windows, la variable d'entorn s'estableix mitjançant l' setordre.

1
set DEBUG=*,-not_this

Tingueu en compte que PowerShell utilitza una sintaxi diferent per establir variables d'entorn.

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

A continuació, executeu el programa que s'ha de depurar com de costum.

Colors de l'espai de noms

Cada instància de depuració té un color generat en funció del nom del seu espai de noms. Això ajuda a l'anàlisi visual de la sortida de depuració per identificar a quina instància de depuració pertany una línia de depuració.

Node.js

A Node.js, els colors s'activen quan stderr és un TTY. També hauríeu d' instal·lar el supports-colormòdul juntament amb Debug, en cas contrari, Debug només utilitzarà un petit grapat de colors bàsics.

Navegador web

Els colors també estan activats als "Inspectors web" que entenen l' %copció de format. Aquests són els inspectors web de WebKit, Firefox ( des de la versió 31 ) i el connector Firebug per a Firefox (qualsevol versió).

Diferència de mil·lisegons

Quan es desenvolupa activament una aplicació, pot ser útil veure quan el temps passat entre una debug()trucada i la següent. Suposem, per exemple, que invoqueu debug()abans de sol·licitar un recurs, i després també, el "+NNNms" us mostrarà quant de temps s'ha dedicat. entre trucades.

Quan stdout no és un TTY, Date#toISOString()s'utilitza, el que fa que sigui més útil per registrar la informació de depuració com es mostra a continuació:

Convencions

Si utilitzeu això en una o més de les vostres biblioteques, hauríeu d' utilitzar el nom de la vostra biblioteca perquè els desenvolupadors puguin alternar la depuració com vulgueu sense endevinar els noms. Si teniu més d'un depurador, hauríeu de prefixar -los amb el nom de la biblioteca i utilitzeu ":" per separar les funcions. Per exemple, "bodyParser" de Connect seria "connect:bodyParser". Si afegiu un "*" al final del vostre nom, sempre estarà habilitat independentment de la configuració de DEBUG variable d'entorn. A continuació, podeu utilitzar-la per a la sortida normal així com per a la sortida de depuració.

Comodins

El *caràcter es pot utilitzar com a comodí. Suposem, per exemple, que la vostra biblioteca té depuradors anomenats "connect:bodyParser", "connect:compress", "connect:session", en lloc d'enumerar els tres amb , simplement DEBUG=connect:bodyParser,connect:compress,connect:sessionpodeu fer DEBUG=connect:*, o executar tot el que utilitzeu aquest mòdul simplement feu servir DEBUG=*.

També podeu excloure depuradors específics prefixant-los amb un caràcter "-". Per exemple, DEBUG=*,-connect:*inclouria tots els depuradors excepte els que comencen per "connectar:".

Variables del mediambient

Quan feu servir Node.js, podeu establir unes quantes variables d'entorn que canviaran el comportament del registre de depuració:

Nom Propòsit
DEBUG Activa/desactiva espais de noms de depuració específics.
DEBUG_HIDE_DATE Amaga la data de la sortida de depuració (no TTY).
DEBUG_COLORS Si s'utilitzen o no colors a la sortida de depuració.
DEBUG_DEPTH Profunditat d'inspecció d'objectes.
DEBUG_SHOW_HIDDEN Mostra les propietats ocultes dels objectes inspeccionats.

Nota: les variables d'entorn que comencen per DEBUG_acaben convertint-se en un objecte Options que s'utilitza amb %o/ %Oformatters. Consulteu la documentació de Node.js per util.inspect() obtenir la llista completa.

Formatters

Debug utilitza un format d'estil printf . A continuació es mostren els formatadors admesos oficialment:

Formatador Representació
%O Imprimeix força un objecte en diverses línies.
%o Imprimeix força un objecte tot en una sola línia.
%s Corda.
%d Nombre (tant enter com flotant).
%j JSON. S'ha substituït per la cadena "[Circular]" si l'argument conté referències circulars.
%% Signe de percentatge únic ('%'). Això no consumeix cap argument.

Custom formatters

Podeu afegir formatadors personalitzats ampliant l' debug.formattersobjecte. Per exemple, si voleu afegir suport per a la representació d'un buffer com a hexadecimal amb %h, podeu fer alguna cosa com:

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

Suport del navegador

Podeu crear un script preparat per al navegador mitjançant browserify , o simplement utilitzar la compilació browserify-as-a-service , si no voleu crear-lo vosaltres mateixos.

L'estat d'habilitació de la depuració es manté actualment per localStorage. Considereu la situació que es mostra a continuació on teniu worker:ai worker:b, i voleu depurar tots dos. Podeu activar-ho mitjançant localStorage.debug:

1
localStorage.debug = 'worker:*'

I després actualitzeu la pàgina.

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);

Fluxos de sortida

Per defecte, debuginiciarà sessió a stderr, però això es pot configurar per espai de noms anul·lant el logmètode:

Exemple 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');

Estableix dinàmicament

També podeu habilitar la depuració dinàmicament cridant al enable()mètode:

1 2 3 4 5 6 7 8 9
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'));

imprimir:

1 2 3
1 false 2 true 3 false

Ús:
enable(namespaces)
namespacespot incloure modes separats per dos punts i comodins.

Tingueu en compte que la trucada enable()anul·la completament la variable DEBUG establerta anteriorment:

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

Comprovació de si un objectiu de depuració està habilitat

Després d'haver creat una instància de depuració, podeu determinar si està habilitada o no marcant la enabledpropietat:

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

També podeu canviar manualment aquesta propietat per forçar que la instància de depuració estigui activada o desactivada.

Autors

  • TJ Holowaychuk
  • Nathan Rajlich
  • Andrew Rhyne

Col·laboradors

Ajudeu-nos amb una donació mensual i ajudeu-nos a continuar amb les nostres activitats. [ Fes-te col·laborador ]

Patrocinadors

Fes-te patrocinador i aconsegueix el teu logotip al nostre LLEGEIXME a Github amb un enllaç al teu lloc. [ Fes-te patrocinador ]

llicència

(Llicència MIT)

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

Es concedeix permís, de manera gratuïta, a qualsevol persona que obtingui una còpia d'aquest programari i els fitxers de documentació associats (el "Programari") per tractar el Programari sense restriccions, inclosos, sense limitació, els drets d'utilitzar, copiar, modificar, combinar. , publicar, distribuir, subllicenciar i/o vendre còpies del Programari, i permetre que les persones a qui es subministra el Programari ho facin, subjecte a les condicions següents:

L'avís de drets d'autor anterior i aquest avís de permís s'inclouran a totes les còpies o parts substancials del Programari.

EL PROGRAMARI ES PROPORCIONA "TAL CUAL", SENSE GARANTIA DE CAP TIPUS, EXPLÍCITA O IMPLÍCITA, INCLOSANT, PERÒ NO LIMITAR-SE A LES GARANTIES DE COMERCIABILITAT, IDONEITAT PER A UN PROPÒSIT PARTICULAR I NO INFRACCIÓ. RECLAMACIÓ, DANYS O ALTRES RESPONSABILITATS, JA SIGUI EN UNA ACCIÓ DE CONTRACTE, DORMIR O ALTRE ALTRE, DERIVADA DEL PROGRAMARI O EN RELACIÓ AMB EL PROGRAMARI O L'ÚS O ALTRES TRATATS EN EL PROGRAMARI.