매일 npm 패키지 debug

11712 단어
매일 npm 패키지 debug
  • 매일 npm 패키지 debug
  • 소개:
  • 밀리 초의 차이
  • 어댑터 *
  • 환경 변수
  • 포맷
  • 사용자 정의 형식

  • 브 라 우 저 지원
  • debug 확장
  • 동적 설정
  • 디 버 깅 대상 이 활성화 되 었 는 지 확인 합 니 다.
  • 취미 코드 읽 기
  • 브 라 우 저 환경 인지 nodeJs 환경 인지 어떻게 판단 합 니까?
  • 브 라 우 저 환경 / nodeJs 환경 바 텀 인쇄 는 무엇 을 사용 하여 이 루어 집 니까?
  • 인쇄 된 모든 log 는 뒤쪽 에 시간 이 지 날수 록 이 시간 을 어떻게 계산 합 니까?
  • 포맷 은 어떻게 현실 적 입 니까?포맷 된 확장 은 어떻게 이 루어 집 니까?

  • 참고:

  • 소 셜 네트워크 서비스 / 소 셜 링크:

  • 소개:
    이것 은 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. js
    commonJs:
    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);

    참고:
  • https://www.npmjs.com/package...
  • https://juejin.cn/post/684490...

  • 소 셜 네트워크 서비스 / 소 셜 링크:
    (관심 을 지불 오신 것 을 환영 합 니 다, 관심 을 환영 합 니 다)
    Github: @ huangyangquang 위 챗 공식 번호: 전단 선배 Joshua

    좋은 웹페이지 즐겨찾기