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

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에 지시하는 방법이 있습니까?



답변

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


답변

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

  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에서 개발하는 경우 적어도이 접근 방식은 두 환경 모두에 상당히 이식 가능합니다.


답변

이상적으로는 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이 재정의 된 셸 매개 변수에주의를 기울일 것입니다.


답변

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/


답변

이를 위해 특별히 생성 된 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 startBash 내부 에서 실행해야했습니다 . 나는 실행 cmd실행하여 나는 열려 떠들썩한 파티를 "c:\Program Files\Git\bin\bash.exe". bash 쉘에서 나는 그 전화를 할 수 있었다 npm buildnpm start성공적으로.

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

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


답변

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

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

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

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

npm config set script-shell pwsh [--global]