2017-10-01 6 views
2

여기 내 문제가 있습니다. 테스트를 자동으로 실행하는 CLI를 만들고 싶습니다.다른 NodeJS 프로세스 내부에 JS 파일 (로그 등 ...)을 실행하십시오.

node test.js 

는 기본적으로, 이전 명령과 정확히 같은 일을 할, 그래서 나는이 작업을 수행하는 기술에 대한 인터넷 검색 : CLI를하지 않고, 나는 노드 명령으로 모든 것을 완벽을 실행할 수 있어요. 나는 발견이 :

#!/usr/bin/env node 
'use strict'; 
const options = process.argv; 
const { execFile } = require('child_process'); 
const child = execFile('node', ['../dist/test.js'], (error, stdout, stderr) => { 
    if (error) { 
     throw error; 
    } 
    console.log(stdout); 
}); 

test.js 파일에, 나는 ora 패키지를 사용하고, 때문에이 방법은 나를 위해 작동하지 않습니다. 그리고이 패키지는 실시간 애니메이션을 제작하기 때문에 stdout에 포함되지 않습니다.

노드를 사용하여 test.js (서브 프로세스없이) 실시간으로 실행할 수있는 방법이 있습니까? 다른 방법을 사용할 수는 있지만 CLI를 NPM에 게시하고자하므로 JavaScript에 있어야합니다.

내가 여기서 말한 모든 파일은 GitHub에서 찾을 수 있습니다. 일반적으로이 링크는 필요하지 않지만 더 자세히 살펴볼 필요가있을 경우 제공합니다.

답변

0

내 솔루션입니다, 당신은 파일의 코드를 얻기 위해 fs 라이브러리를 사용할 수 있습니다 다음, 당신은 단순히 동일한 프로세스에서 실행 eval를 사용합니다.

const fs = require("fs"); 

function run(file) { 
    fs.readFile(file, (err, data) => { 
     eval(data.toString('utf8')) 
    }) 
} 
+0

'eval'을 사용하지 않는 것이 좋습니다. [Docs] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval#Don't_use_eval_needlessly!) 또한이 [question] (https://stackoverflow.com/) 질문/86513/why-is-using-the-javascript-eval-function-a-bad-idea) –

0

정의한 모듈이 필요하면 CLI 코드에서 test() 함수를 호출해야합니다. mocha와 jasmine을 살펴보십시오 : 두 도구 모두 CLI를 제공하지만 임의 JS 코드에서 테스트 프레임 워크를 호출하기위한 지침도 제공합니다.

+0

내 'test.js'는 기능이 아니기 때문에 하나의 기능으로 모든 것을 묶을 수는 있지만, 내가 본 것은 아닙니다. 나는 그것을 할 다른 방법이 없을 때에 만 그것을 할 것입니다. –

+0

하나 이상의 기능을 가지고 있어도 상관 없습니다. 내가 말한 것은 CLI가 핵심 테스트 프레임 워크 모듈을 필요로하고 그것을 사용할 수있는 JS 코드라는 것입니다. 동일한 코드베이스에 있으므로 로컬 모듈 만 간단히 요구할 수 있습니다. 만약 다른 누군가가 CLI를 개발했다면, 당신은 테스트 프레임 워크에 의존성을 추가하기 위해'npm install'을 할 것이고 코드에서 함수/클래스를 호출 할 것입니다. –

+0

훨씬 더 좋은 해결책을 찾았습니다 : 맨 위 참고;) –

0

하위 프로세스가없는 방법은 생각할 수 없습니다. 그러나 이것은 도움이 될 수 있습니다. 하위 프로세스 exec는 버퍼가 가득 차면 프로세스가 중단되는 출력을 버퍼링하므로 연속 출력 명령과 작동하지 않습니다.

적합한 솔루션은 spwan입니다 :

여기
var spwan = require('child_process').spwan 
var child = spwan('node', ['../dist/test.js']) 

child.stdout.on('data', function(data) { 
    console.log(data) 
}) 

child.stderr.on('data', function(data) { 
    console.log(data) 
}) 
+0

작동하지 않고 Buffer를 출력합니다. –

+0

'data.toString ('utf8')' –

+0

덕분에 쉽게 문자열로 변환 할 수 있습니다. 그러나 더 나은 해결책을 찾았습니다. –