2014-04-23 9 views
20

biegnę KMP w oknach i chcieliby skorzystać & stylu równoległe operacje w run-skryptów ale działających równolegle w cmd jest trochę niechlujny w moim pakiecie. plik json Chciałbym zapisemjak ustawić powłokę dla KMP run-skrypty w oknach

skrypty: { "iść": "cmd1 & cmd2"}

ale npm wykonuje skrypt pod cmd.exe, który nie wie o; Mógłbym to zmienić na skrypty: {"go": "nietoperze/bat1.bat") gdzie bat1.bat to plik bat cmd, który używa wywołań stylu Windows lub poleceń startowych do równoległego uruchamiania poleceń. który działa, ale daje mi skrypt, który działa tylko na Windows

byłoby dużo prostsze, jeśli mogę dostać KMP uruchomić skrypt pod klonem bash lub Cygwin Próbowałem config: { „shell”: „bash "} ale nadal działa cmd.exe

czy istnieje sposób, aby powiedzieć npm, aby uruchomić skrypty przy użyciu określonej powłoki (nie cmd.exe)?

Odpowiedz

17

Oto jeden ze sposobów, aby to zrobić:

  1. utworzyć skrypt, takich jak my_script.sh, w katalogu bin projektu.
  2. W pliku package.json dodaj linię, aby uruchomić skrypt za pomocą bash. Na przykład:

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

Teraz można uruchomić skrypt bash z KMP przez:

npm run-script boogie 

Nie bardzo eleganckie, ale działa.

Jeśli pracujesz w systemie Windows i Linux/Unix, to przynajmniej takie podejście jest dość przenośne w obu środowiskach.

+2

Inna opcja: ' "skrypty": { "start": "węzeł ./bin/www" „bash ":" bash -c ", " ls ":" npm run bash ls " }' – cchamberlain

11

Idealnie, przesłonięcie parametru konfiguracyjnego powłoki npm powinno działać, ale npm (przynajmniej wersja 1.4.14) wydaje się w systemie Windows zignorować ustawienie i użyć polecenia cmd.exe.

Użyj następującego polecenia w bash lub Git basha, aby dowiedzieć się ustawienie powłoki:

$ npm config ls -l | grep shell 

Domyślnie wyjście będzie:

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

jednak przesłonić domyślne Parametr powłoki, możesz dodać (lub edytować) plik npmrc do katalogu \ Users \ yourusername \ AppData \ Roaming \ npm \ etc. Wystarczy dodać następującą linię:

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

Ścieżka, której używasz, może być dowolną prawidłową ścieżką do pliku bash.exe. Teraz, po uruchomieniu wyżej „npm config ls -l | grep shell” polecenie, zobaczysz następujący wynik, co wskazuje, że parametr powłoka została nadpisane:

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

Pewnego dnia, być może, nowa wersja npm zwróci uwagę na przesłonięty parametr powłoki.

+0

Szkoda, że ​​to zadziałało. Zmieniłem zmienną środowiskową COMSPEC i wygląda na to, że wyciągam z niej, ale nie mogłem jej sprawić, żeby działała poprawnie. – cchamberlain

+2

Tutaj jest temat związany z github npm https://github.com/npm/npm/issues/6543 – dmi3y

+1

Robi to samo zadanie: 'zestaw konfiguracji makra $ npm C: \\ msys64 \\ usr \\ bin \\ bash "' – kwarnke

1

Użyj specjalnie stworzonego węzła_moduł do tego celu. Proponuję użyć npm-run-all, ale istnieje others, na przykład parallelshell.

Przykładowy przykład parallelshell służy do zastępowania pytania.

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

następujące polecenie:

npm run parallelexample1 

działa zarówno na Windows i UNIX (Linux/MacOS).

Interesująco npm-run-all nie obsługuje poleceń powłoki; dlatego musimy umieścić wszystkie polecenia powłoki w oddzielnych skryptach, jak poniżej.

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

następujące polecenie:

npm run parallelexample2 

działa zarówno na Windows i UNIX (Linux/MacOS).

+0

dzięki za cynk dla npm-run-all, próbowałem opcji '- parallel" również –

0

tylko za pomocą CMD sposób uruchomić .bat!

.json

`` `js

"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/" 
}, 

` ``

.bat

`` `sh

start http://localhost:7777/datas/ && start http://localhost:7777/Info/ 

`` `

+0

https://github.com/gildata/RAIO/issues/70 –

10

Od npm 5,1

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

To działało idealnie dla mnie, dzięki! (Jedyną różnicą jest to, że nie potrzebowałem (x86)). –

+1

To powinna być zaakceptowana odpowiedź! Działa na Windows 10 z Git Bash (w zestawie kod VS). – AnAurelian