2014-12-06 2 views
1

는 이상하게도, 컬러 텍스트를 개체로 변환됩니다 파일에 기록 할 때 표기법을 객체로 변환됩니다. 아스키 칼라 코드가 어떤 종류의 배열처럼 해석되어서 객체 표기법 형식으로 파일에 쓰여진 것처럼 보입니다.Node.js; 표준 출력에서 ​​컬러 텍스트가 나는 컬러 텍스트를 생성하는 노드 응용 프로그램에서 표준 출력 저장할 때

이 출력은 표준 출력 단말에 송신 할 때의 모습이다. enter image description here

그리고 이것은 파일로 파이프 된 후 출력되는 것처럼 보이며 파일은 cat 명령으로 볼 수 있습니다. enter image description here

사람이 여기에 무슨 일이 일어나고 있는지 이해합니까?

편집 : 여기가 CLI script source 그래서 당신이 텍스트를 생성하는 방법을 볼 수 있습니다.

EDIT 2 :이 문제를 해결하기 위해 Electron에 풀 요청을 제출하고, 이후되었습니다

Object.defineProperty(String.prototype, color, 
    { get: function() { 
     if (noColors || !self.opts.useColors) return this; 
     return '\033[' + colors[color] + 'm' + this + '\033[0m'; 
    } 
    , configurable: true 
}); 

EDIT 3 : 여기에 텍스트 색상을 사용하는 전자 모듈을 제공하는 코드이며 버전 0.4.1에서 병합되었습니다. CLI를 만들려는 경우 권장합니다.

+1

, 그것은 배너 "직조기"고 구성하는 자입니다. 아마도 출력물을 어떻게 생산하는지 보여줄 수 있습니다. –

+0

@ MarkkuK 물론, 사용 된 코드로 질문을 업데이트하겠습니다. –

+0

출력이 터미널 형 또는 파일 (블록) 형 출력 장치로 이동하는지 확인할 수 있습니다. 파일로 리디렉션 할 때 JSON 형식의 출력을 얻으므로 의도적으로 * 사용해야합니다. (즉, 프로그램이 정상적으로 작동하는 방식이 아닙니다.) – usr2564301

답변

1

문제점을 발견했습니다. 노드가 stdout이 터미널을 가리키는 지 여부를 감지합니다. 그럴 경우 stdout을 TTY 모드로 설정합니다. 전자 색칠을 담당하는 모듈은 stdout에서 TTY 부울을 사용하여 아래 코드에서 self.opts.useColors의 값을 설정합니다. stdout이 파일을 가리키면 self.opts.useColors이 거짓이며 결과적으로 this의 값이 반환됩니다. 여기에 문제가있다. this은 개체이므로 저자가 예상 한 문자열이 아닙니다. return thisreturn this + ''으로 대체하면 this을 문자열로 변환하여 문제를 해결할 수 있습니다. 브로큰

: 고정

Object.defineProperty(String.prototype, color, 
    { get: function() { 
     if (noColors || !self.opts.useColors) return this; 
     return '\033[' + colors[color] + 'm' + this + '\033[0m'; 
    } 
    , configurable: true 
}); 

:

그것은 아스키 색상 코드없는
Object.defineProperty(String.prototype, color, 
    { get: function() { 
     if (noColors || !self.opts.useColors) return this + ''; 
     return '\033[' + colors[color] + 'm' + this + '\033[0m'; 
    } 
    , configurable: true 
});