매일 npm 패키지 debug
소개:
이것 은 Node. js 핵심 디 버 깅 기술 을 모방 한 소형 자 바스 크 립 트 디 버 깅 실 용 프로그램 이다.Node. js 와 웹 브 라 우 저 에 적 용 됩 니 다.
debug 패키지 에서 함수 노출 하기;모듈 의 이름 을 이 함수 에 전달 하기 만 하면 console. error 를 봉 인 된 디 버 깅 문 구 를 되 돌려 줍 니 다.이것 은 모듈 의 다른 부분 과 전체 모듈 의 디 버 깅 출력 으로 전환 할 수 있 습 니 다.
밀리 초의 차이
응용 프로그램 을 적극적으로 개발 하고 코드 를 진지 하 게 설계 할 때 debug () 호출 과 다음 호출 사이 에 걸 리 는 시간 을 확인 하 는 것 이 유용 합 니 다.
예 를 들 어 자원 을 요청 하기 전에 debug () 를 한 번 호출 했 고 요청 이 끝 난 후에 도 한 번 호출 했 으 며 두 번 호출 하면 호출 사이 에 얼마나 걸 렸 는 지 보 여 줍 니 다.
어댑터 *
예 를 들 어 라 이브 러 리 에 'connect: body Parser', 'connect: copress',' connect: session '이라는 디 버 거 가 있다 고 가정 하면
DEBUG=connect:bodyParser,connect:compress,connect:session
과 같은 디 버 거 를 하나씩 열거 하지 않 아 도 됩 니 다.간단하게 실행 하거나
DEBUG=connect:*
이 모듈 을 사용 하여 모든 내용 을 실행 할 수 있 습 니 다 DEBUG=*
.환경 변수
Node. js 를 실행 할 때 디 버 깅 로그 기록 을 변경 할 환경 변 수 를 설정 할 수 있 습 니 다.
변수 이름
용도.
DEBUG
특정한 디 버 깅 네 임 스페이스 를 사용 하거나 사용 하지 않 습 니 다.
DEBUG_HIDE_DATE
디버그 출력 날짜 숨 기기 (TTY 가 아 닌)
DEBUG_COLORS
디 버 깅 출력 에 색상 을 사용 할 지 여부
DEBUG_DEPTH
대상 검사 깊이
DEBUG_SHOW_HIDDEN
검사 대상 의 숨겨 진 속성 보이 기
주의: DEBUG시작 하 는 환경 변 수 는% o /% O 포맷 프로그램 과 함께 사용 할 수 있 는 Options 대상 으로 변 환 됩 니 다.전체 목록 에 대해 서 는 참조 하 시기 바 랍 니 다.
util.inspect() Node. js 문서 입 니 다.
포맷
Debug 는 printf - style 형식 을 사용 합 니 다.다음은 공식 적 으로 지원 하 는 포맷 프로그램 입 니 다.
격식.
속뜻
%O
여러 줄 에 대상 을 예 쁘 게 인쇄 하 다.
%o
한 줄 에 대상 을 예 쁘 게 인쇄 하 다.
%s
문자열
%d
숫자 (정수 와 부동 소수점)
%j
JSON。 매개 변수 에 순환 참조 가 포함 되 어 있 으 면 문자열 '[Circular]' 로 대 체 됩 니 다.
%%
단일 백분율 ('%'), 인자 나 변 수 를 사용 하지 않 습 니 다.
사용자 정의 형식
확장
debug.formatters
을 통 해 사용자 정의 형식 을 추가 할 수 있 습 니 다.예 를 들 어% h 를 사용 하여 Buffer 를 16 진수 로 렌 더 링 하 는 지원 을 추가 하려 면 다음 코드 를 쓸 수 있 습 니 다.
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
브 라 우 저 지원
브 라 우 저 ify 를 사용 하여 브 라 우 저 준비 스 크 립 트 를 구축 하거나, 직접 구축 하고 싶 지 않 으 면 브 라 우 저 ify - as - a - service 로 구축 할 수 있 습 니 다.
debug 의 사용 상 태 는 현재 localstorage 에서 결정 합 니 다.
다음 코드 의 상황 을 고려 하면 워 커: a 와 워 커: b 가 있 습 니 다. 둘 을 디 버 깅 하고 싶다 면.localStorage. debug 를 사용 하여 이 기능 을 사용 할 수 있 습 니 다:
`localStorage.debug = 'worker:*'`
그리고 페이지 를 새로 고침 합 니 다.
a = debug('worker:a');
b = debug('worker:b');
setInterval(function(){
a('doing some work');
}, 1000);
setInterval(function(){
b('doing some work');
}, 1200);
debug 확장
디 버 거 debugger 를 간단하게 확장 할 수 있 습 니 다.
const log = require('debug')('auth');
//creates new debug instance with extended namespace
const logSign = log.extend('sign');
const logLogin = log.extend('login');
log('hello'); // auth hello
logSign('hello'); //auth:sign hello
logLogin('hello'); //auth:login hello
동적 설정
enable () 방법 으로 디 버 깅 을 동적 으로 사용 할 수 있 습 니 다.
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'));
출력:
1 false
2 true
3 false
디 버 깅 대상 이 활성화 되 었 는 지 확인 합 니 다.
디 버 깅 인 스 턴 스 를 만 든 후 enabled 속성 을 검사 하여 사용 여 부 를 확인 할 수 있 습 니 다.
const debug = require('debug')('http');
if (debug.enabled) {
// do stuff...
}
디 버 깅 인 스 턴 스 를 강제로 사용 하거나 사용 하지 않도록 이 속성 을 수 동 으로 전환 할 수 있 습 니 다.
취미 코드 읽 기
브 라 우 저 환경 인지 nodeJs 환경 인지 어떻게 판단 합 니까?
if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {
module.exports = require('./browser.js'); //
} else {
module.exports = require('./node.js'); // nodeJs
}
설명:
Electron render / nwjs 프로 세 스 를 검사 합 니 다. 노드 이기 때문에 브 라 우 저 로 봐 야 합 니 다.
브 라 우 저 환경 / nodeJs 환경 바 텀 인쇄 는 무엇 을 사용 하여 이 루어 집 니까?
브 라 우 저 환경:
/**
* Invokes `console.debug()` when available.
* No-op when `console.debug` is not a "function".
* If `console.debug` is not available, falls back
* to `console.log`.
*
* @api public
*/
exports.log = console.debug || console.log || (() => {});
nodeJs 환경:
/**
* Invokes `util.format()` with the specified arguments and writes to stderr.
*/
function log(...args) {
return process.stderr.write(util.format(...args) + '
');
}
common.js:
···
···
const logFn = self.log || createDebug.log;
logFn.apply(self, args);
···
···
인쇄 된 모든 log 는 뒤쪽 에 시간 이 지 날수 록 이 시간 을 어떻게 계산 합 니까?
우선, 디 버 거 는
createDebug
을 통 해 생 성 된 것 임 을 알 아야 한다.그 다음으로
createDebug
실 행 된 반환 값 은 debug
이라는 함수 (실제로 이것 은 폐쇄 적 인 것) 이다.마지막 으로 이
debug
에서 prevTime
와 curr
를 통 해 호흡 Number(new Date())
을 맞 추 면 이 시간 을 계산 할 수 있다.실제로 이 시간 은 같은 디 버 거 (또는 디 버 깅 문, 즉
debug
에서 호출 된 시간 차 입 니 다. 예 를 들 어 제 사례 를 참고 할 수 있 습 니 다: index 1. jscommonJs:
function setup {
// ....
function createDebug (namespace) {
let prevTime;
// ...
function debug(...args) {
const self = debug;
// Set `diff` timestamp
const curr = Number(new Date());
const ms = curr - (prevTime || curr);
self.diff = ms;
self.prev = prevTime;
self.curr = curr;
prevTime = curr;
}
return debug
}
// ...
return createDebug;
}
module.exports = setup;
포맷 은 어떻게 현실 적 입 니까?포맷 된 확장 은 어떻게 이 루어 집 니까?
common.js:
// ···
// ···
if (typeof args[0] !== 'string') {
// Anything else let's inspect with %O
args.unshift('%O');
}
// Apply any `formatters` transformations
let index = 0;
args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
// If we encounter an escaped % then don't increase the array index
if (match === '%%') {
return '%';
}
index++;
const formatter = createDebug.formatters[format];
if (typeof formatter === 'function') {
const val = args[index];
match = formatter.call(self, val);
// Now we need to remove `args[index]` since it's inlined in the `format`
args.splice(index, 1);
index--;
}
return match;
});
// ···
// ···
browser.js:
const {formatters} = module.exports;
/**
* Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
*/
formatters.j = function (v) {
try {
return JSON.stringify(v);
} catch (error) {
return '[UnexpectedJSONParseError]: ' + error.message;
}
};
node.js:
const {formatters} = module.exports;
/**
* Map %o to `util.inspect()`, all on a single line.
*/
formatters.o = function (v) {
this.inspectOpts.colors = this.useColors;
return util.inspect(v, this.inspectOpts)
.split('
')
.map(str => str.trim())
.join(' ');
};
/**
* Map %O to `util.inspect()`, allowing multiple lines if needed.
*/
formatters.O = function (v) {
this.inspectOpts.colors = this.useColors;
return util.inspect(v, this.inspectOpts);
참고:
소 셜 네트워크 서비스 / 소 셜 링크:
(관심 을 지불 오신 것 을 환영 합 니 다, 관심 을 환영 합 니 다)
Github: @ huangyangquang 위 챗 공식 번호: 전단 선배 Joshua
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.