2015-01-06 4 views

답변

14

npm이 프로세스 간의 복잡한 관계를 관리하는 가장 좋은 도구라고는 생각하지 않습니다.

노드의 child_process 모듈을 사용하여 보조 프로세스의 시작과 종료를 관리하는 노드 스크립트를 만들면 훨씬 편리합니다 (spawn 등).

은 ( bash 쉘을 가정)처럼

당신은 당신의 NPM 스크립트를 구성 할 수 ... 것으로, 항상 직접, 사용 가능한 답을 제공하기 위해 노력하는 정신으로 미루어 보아 :

scripts:{ 
    runBoth: "npm runA & npm runB",  // run tasks A and B in parallel 
    runA: "taskA & TASKA_PID=$!", // run task A and capture its PID into $TASKA_PID 
    runB: "taskB && kill $TASKA_PID" // run task B and if it completes successfully, kill task A using its saved PID 
} 

유일한 '마법'여기입니다 :

  1. 당신은 t를 사용하여 백그라운드에서 명령을 실행할 때 그는 bash 셸 (&을 끝에 추가하면 어떻게됩니까?) 명령을 실행 한 직후에만 $!을 사용하여 PID를 찾을 수 있습니다. (Advanced Bash-Scripting Guide: Chapter 9. Another Look at Variables - 9.1. Internal Variables의 설명을 참조하십시오.)
  2. taskB 은 성공시 process.exit (0)을 호출해야합니다. 실패시 process.exit (-1)를 호출하면 && 테스트가 올바르게 처리됩니다. (자세한 내용은 this answer를 참조하십시오.) npm-run-all 패키지는 당신이 찾고있는 무엇을 할 수
+0

배쉬 트릭을 가져 주셔서 감사합니다! 그것은 굉장합니다. 당신의 대답은 제가 찾고있는 것입니다. – franleplant

+2

runB가 runA에서 $ TASK_PID에 액세스 할 수 있다고 생각하지 않습니다. – nathancahill

+0

나를 위해 작동하지 않습니다. – prongs

0

:

"scripts": { 
    "runA": "taskA", 
    "runB": "taskB", 
    "runBoth": "npm-run-all -p runA runB" 
} 

(-p 그들을 실행 : 당신의 package.json 파일에서 다음

$ npm install --save npm-run-all 

병렬로 -s을 사용하십시오.

관련 문제