Windows에서 npm 실행 스크립트에 대한 셸을 설정하는 방법


82

Windows에서 npm을 실행 중이며 실행 스크립트에서 병렬 작업을 사용하고 스타일을 지정하고 싶지만 cmd에서 병렬로 실행하는 것은 내가 쓰고 싶은 package.json 파일에서 다소 지저분합니다.

scripts: { "go": "cmd1 & cmd2"} 

하지만 npm은 cmd.exe에서 스크립트를 실행합니다.이 스크립트 ; 를 스크립트로 변경할 수 있습니다. { "go": "bats/bat1.bat")여기서 bat1.bat는 Windows 스타일 호출을 사용하거나 명령을 병렬로 실행하는 시작 명령을 사용하는 cmd bat 파일입니다. 작동하지만 Windows에서만 작동하는 스크립트를 제공합니다.

npm이 bash 복제 또는 cygwin에서 스크립트를 실행하도록 할 수 있다면 훨씬 간단 할 것입니다.

시도 config: { "shell": "bash"} 했지만 여전히 cmd.exe를 실행했습니다.

cmd.exe가 아닌 특정 셸을 사용하여 스크립트를 실행하도록 npm에 지시하는 방법이 있습니까?


[여전히] package.json에서 쉘을 지정할 수 없습니까? Windows와 bash 스크립팅 모두에 npm을 사용하고 특정 package.json에 대한 기본 "shell"또는 "script-shell"설정을 재정의 할 방법이 없습니다.
Corey Alix

답변:


153

npm 5.1 이후

npm config set script-shell "C:\\Program Files (x86)\\git\\bin\\bash.exe"  

또는 (64 비트 설치)

npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"

참고 당신은 할 필요가 설치된 Windows 용 자식을 .

다음을 실행하여 되돌릴 수 있습니다.

npm config delete script-shell

8
이것은 받아 들여진 대답이어야합니다! Git Bash (VS 코드 포함)가있는 Windows 10에서 작동합니다.
Alex Vang 2017

7
npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe"Windows 10 64-Bit에서 병렬 스크립트를 실행하는 모든 문제에 대한 답입니다. @DuncanSungWKim 이것에 대해 감사합니다.
TaeKwonJoe

고마워요, cmd에서 작동하지만 bash에서는 작동하지 않는 npm start에 문제가 있었고 제안한 스크립트를 실행했는데 작동했습니다 !!!! .... 대답을 googeling -_- 감사를 도움 이틀 후
AlonSamuel

2
이미 git bash 셸 npm run <script에 있고이 구성으로 실행하면 스크립트를 실행하는 새로운 git bash 창이 생성됩니다. 이것은 내가 원하는 것이 아닙니다. 호출 쉘 내에서 단순히 쉘을 호출하는 방법이 있습니까?
JHH

2
@JHH-bash.exe 대신 git-bash.exe를 사용했기 때문에 vscode에서 셸이 열렸습니다. vscode bash가 스크립트 쉘 bash와 동일하도록 수정했을 때 문제가 해결되었습니다.
Corey Alix

28

한 가지 방법은 다음과 같습니다.

  1. 프로젝트 bin 디렉터리에 my_script.sh와 같은 스크립트를 만듭니다.
  2. package.json 파일에서 bash를 사용하여 스크립트를 실행하는 행을 추가하십시오. 예를 들면 :

    "scripts": {
      "boogie": "bash bin/my_script.sh"
    }
    

이제 다음과 같이 npm에서 bash 스크립트를 실행할 수 있습니다.

    npm run-script boogie

별로 우아하지는 않지만 작동합니다.

Windows 및 Linux / Unix에서 개발하는 경우 적어도이 접근 방식은 두 환경 모두에 상당히 이식 가능합니다.


3
다른 옵션 : "scripts": { "start": "node ./bin/www", "bash": "bash -c", "ls": "npm run bash ls" }
cchamberlain 2015 년

16

이상적으로는 npm 셸 구성 매개 변수를 재정의하는 것이 작동하지만 npm (최소 버전 1.4.14)은 Windows에서 설정을 무시하고 대신 cmd.exe를 사용하는 것처럼 보입니다.

bash 또는 Git Bash 셸에서 다음 명령을 사용하여 셸 설정을 찾습니다.

$ npm config ls -l | grep shell

기본적으로 출력은 다음과 같습니다.

shell = "C:\\WINDOWS\\system32\\cmd.exe"

그러나 기본 셸 매개 변수를 재정의하려면 npmrc 파일을 \ Users \ yourusername \ AppData \ Roaming \ npm \ etc 디렉터리에 추가 (또는 편집) 할 수 있습니다. 다음 줄을 추가하십시오.

shell = "C:\\Program Files (x86)\\git\\bin\\bash.exe"

사용하는 경로는 bash.exe에 대한 유효한 경로 일 수 있습니다. 이제 위의 "npm config ls -l | grep shell"명령을 실행하면 쉘 매개 변수가 대체되었음을 나타내는 다음 출력이 표시됩니다.

shell = "C:\\Program Files (x86)\\git\\bin\\bash.exe"
; shell = "C:\\WINDOWS\\system32\\cmd.exe" (overridden)

언젠가는 새 버전의 npm이 재정의 된 셸 매개 변수에주의를 기울일 것입니다.


1
이것이 효과가 있기를 바랍니다. COMSPEC 환경 변수를 변경했는데 그 변수를 가져 오는 것 같지만 제대로 작동하지 못했습니다.
cchamberlain 2015 년

4
이 같은 작업을 수행합니다$ npm config set shell "C:\\msys64\\usr\\bin\\bash"
kwarnke

귀하의 제안에 따라 문제를 해결했습니다. 지금, 나는 더 많은 명령에 의해 분리 포함 NPM에 스크립트를 실행할 수있어 ;폴더 C에,에 Windows를 : \ 사용자 \ 사용자 이름 \ 나는 추가 .npmrc포함 된 파일shell = "C:\\Program Files\\Git\\bin\\bash.exe" script-shell = "C:\\Program Files\\Git\\bin\\bash.exe"
iFederx

2

CMD의 방법을 사용하여 실행하십시오 .bat!

.json
"scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject",
    "app": "cd build & browser-sync start --server --files 'index.html'",
    "bat": "start start-browser.bat",
    "starts": "start http://localhost:7777/datas/ && start http://localhost:7777/Info/"
},
.박쥐
start http://localhost:7777/datas/ && start http://localhost:7777/Info/

1

이를 위해 특별히 생성 된 node_module을 사용합니다. npm-run-all 사용하는 것이 좋지만 parallelshell 과 같은 다른 항목 이 있습니다 .

질문에 대한 드롭 인 교체에 대한 Parallelshell 예제는 아래에 있습니다.

"scripts": {
    "parallelexample1": "parallelshell \"echo 1\" \"echo 2\" \"echo 3\""
},

다음 명령 :

npm run parallelexample1

Windows와 Unix (Linux / MacOS)에서 모두 작동합니다.

흥미롭게도 npm-run-all은 쉘 명령을 지원하지 않습니다. 따라서 모든 쉘 명령을 아래와 같이 별도의 스크립트에 넣어야합니다.

"scripts": {
   "parallelexample2": "npm-run-all echo*",
    "echo1": "echo 1",
    "echo2": "echo 2",
    "echo3": "echo 3"
},

다음 명령 :

npm run parallelexample2

Windows와 Unix (Linux / MacOS)에서 모두 작동합니다.


NPM - 실행 - 모두를위한 팁 주셔서 감사합니다, 나는 시도 --parallel도 옵션
브랜든 소렌 Culley에게

1

제 경우에는 npm startBash 내부 에서 실행해야했습니다 . 나는 실행 cmd실행하여 나는 열려 떠들썩한 파티를 "c:\Program Files\Git\bin\bash.exe". bash 쉘에서 나는 그 전화를 할 수 있었다 npm buildnpm start성공적으로.

Git을 사용하는 경우 이미 bash가있을 수 있습니다. 그렇지 않은 경우 설치할 수 있습니다.

이것이 누군가의 시간을 절약 할 수 있기를 바랍니다.


Linux에서 작동하는 모든 스크립트에서 작동하지 않습니다. 예를 들어PORT=8000
shinzou

0

npm 스크립트에 크로스 플랫폼 powershell https://github.com/powershell/powershell#get-powershell 을 사용할 수도 있습니다 .

단일 프로젝트에 대해 설정하려면 프로젝트 루트 폴더에서 다음을 실행하십시오.

npm config set script-shell pwsh --userconfig ./.npmrc

모든 노드 프로젝트에 대해 전역 적으로 설정하려면 :

npm config set script-shell pwsh [--global]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.