[javascript] 여러 개의 npm 스크립트를 병렬로 실행하려면 어떻게해야합니까?

package.json두 가지 스크립트가 있습니다.

  "scripts": {
    "start-watch": "nodemon run-babel index.js",
    "wp-server": "webpack-dev-server",
  }

Node.js에서 개발을 시작할 때마다이 두 스크립트 를 병렬 로 실행해야합니다 . 내가 생각한 첫 번째는 다음과 같은 세 번째 스크립트를 추가하는 것이 었습니다.

"dev": "npm run start-watch && npm run wp-server"

…하지만 start-watch실행하기 전에 완료 될 때까지 기다립니다 wp-server.

이것들을 어떻게 병렬로 실행할 수 있습니까? output이러한 명령 을 확인해야 합니다. 또한 솔루션에 빌드 도구가 포함 된 경우 다른 프로젝트에서 이미 사용하고 있기 때문에 gulp대신 사용하고 싶습니다 grunt.



답변

라는 패키지를 사용하여 동시에를 .

npm i concurrently --save-dev

그런 다음 npm run dev작업을 다음 과 같이 설정하십시오 .

"dev": "concurrently --kill-others \"npm run start-watch\" \"npm run wp-server\""


답변

UNIX와 유사한 환경을 사용 &하는 경우 구분 기호로 사용 하십시오.

"dev": "npm run start-watch & npm run wp-server"

그렇지 않으면 크로스 플랫폼 솔루션에 관심이 있다면 npm-run-all 모듈을 사용할 수 있습니다 .

"dev": "npm-run-all --parallel start-watch wp-server"


답변

Windows cmd에서 다음을 사용할 수 있습니다 start.

"dev": "start npm run start-watch && start npm run wp-server"

이 방법으로 시작된 모든 명령은 자체 창에서 시작됩니다.


답변

당신은 사용해야 NPM – 실행 – 모든 (또는 concurrently, parallelshell그것을 시작하고 명령을 죽이고보다 효율적으로 제어 할 수 있기 때문에). 연산자는 &, |모든 테스트 완료 후 수동으로 중지해야하기 때문에 나쁜 아이디어이다.

다음은 npm을 통한 각도기 테스트의 예입니다.

scripts: {
  "webdriver-start": "./node_modules/protractor/bin/webdriver-manager update && ./node_modules/protractor/bin/webdriver-manager start",
  "protractor": "./node_modules/protractor/bin/protractor ./tests/protractor.conf.js",
  "http-server": "./node_modules/http-server/bin/http-server -a localhost -p 8000",
  "test": "npm-run-all -p -r webdriver-start http-server protractor"
}

-p = 명령을 병렬로 실행합니다.

-r = 명령 중 하나가 종료 코드 0으로 끝나면 모든 명령을 종료하십시오.

실행 npm run test하면 Selenium 드라이버가 시작되고 http 서버 (파일 제공)가 시작되고 각도기 테스트가 실행됩니다. 모든 테스트가 완료되면 http 서버와 셀레늄 드라이버가 닫힙니다.


답변

&병렬 실행 스크립트로 사용할 수 있습니다

"dev": "npm run start-watch & npm run wp-server"

참조 링크


답변

더 나은 해결책은 사용하는 것입니다 &

"dev": "npm run start-watch & npm run wp-server"


답변

위의 거의 모든 솔루션을 확인했으며 npm-run-all로 만 모든 문제를 해결할 수있었습니다. 다른 모든 솔루션에 비해 주요 장점은 인수를 사용 하여 스크립트실행할 수 있다는 것 입니다.

{
  "test:static-server": "cross-env NODE_ENV=test node server/testsServer.js",
  "test:jest": "cross-env NODE_ENV=test jest",
  "test": "run-p test:static-server \"test:jest -- {*}\" --",
  "test:coverage": "npm run test -- --coverage",
  "test:watch": "npm run test -- --watchAll",
}

메모 run-p는 바로 가기입니다npm-run-all --parallel

이를 통해와 같은 인수로 명령을 실행할 수 있습니다 npm run test:watch -- Something.

편집하다:

하나 더 유용이 옵션 에 대한이 npm-run-all:

 -r, --race   - - - - - - - Set the flag to kill all tasks when a task
                            finished with zero. This option is valid only
                            with 'parallel' option.

추가 -r사용자에 npm-run-all하나의 코드를 완료 할 때 모든 프로세스를 종료하는 스크립트 0. HTTP 서버와 서버를 사용하는 다른 스크립트를 실행할 때 특히 유용합니다.

  "test": "run-p -r test:static-server \"test:jest -- {*}\" --",