Używam npm w systemie Windows i chciałbym używać i stylizować operacje równoległe w skryptach uruchamiania, ale równoległe uruchamianie w cmd jest trochę niechlujne w moim pliku package.json, który chciałbym napisać-
scripts: { "go": "cmd1 & cmd2"}
ale npm wykonuje skrypt pod cmd.exe, który nie wie, ;
że mógłbym to zmienić na skrypty: { "go": "bats/bat1.bat")
gdzie bat1.bat jest plikiem cmd bat, który używa wywołań stylu Windows lub poleceń uruchamiania, aby uruchamiać polecenia równolegle. co działa, ale daje mi skrypt, który działa tylko w systemie Windows.
Byłoby o wiele prostsze, gdybym mógł uzyskać npm, aby uruchomić skrypt pod klonem bash lub cygwin.
Próbowałem,
config: { "shell": "bash"}
ale nadal działał cmd.exe
Czy istnieje sposób, aby nakazać npm uruchamianie skryptów przy użyciu określonej powłoki (nie cmd.exe)?
Odpowiedzi:
Ponieważ npm 5.1
npm config set script-shell "C:\\Program Files (x86)\\git\\bin\\bash.exe"
lub (instalacja 64-bitowa)
npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"
Pamiętaj, że musisz mieć zainstalowany program git dla systemu Windows .
Możesz go cofnąć, uruchamiając:
źródło
npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe"
jest odpowiedzią na wszystkie moje problemy z uruchamianiem równoległych skryptów w systemie Windows 10 64-bit. @DuncanSungWKim 감사 합니다 do tego.npm run <script
z tą konfiguracją, nowe okno git bash jest tworzone z uruchomieniem skryptu. Nie tego chcę. Czy istnieje sposób, aby po prostu wywołać powłokę wewnątrz wywołującej powłoki?Oto jeden sposób, aby to zrobić:
W pliku package.json dodaj wiersz uruchamiający skrypt przy użyciu bash. Na przykład:
"scripts": { "boogie": "bash bin/my_script.sh" }
Teraz możesz uruchomić swój skrypt bash z npm przez:
Niezbyt eleganckie, ale działa.
Jeśli tworzysz zarówno w systemie Windows, jak i Linux / Unix, to przynajmniej takie podejście jest dość przenośne w obu środowiskach.
źródło
"scripts": { "start": "node ./bin/www", "bash": "bash -c", "ls": "npm run bash ls" }
W idealnym przypadku zastąpienie parametru konfiguracji powłoki npm powinno działać, ale npm (co najmniej wersja 1.4.14) wydaje się w systemie Windows zignorować ustawienie i zamiast tego użyć cmd.exe.
Użyj następującego polecenia w powłoce bash lub Git Bash, aby sprawdzić ustawienie powłoki:
Domyślnie wynik będzie następujący:
shell = "C:\\WINDOWS\\system32\\cmd.exe"
Jednak aby zastąpić domyślny parametr powłoki, możesz dodać (lub edytować) plik npmrc do katalogu \ Users \ nazwa użytkownika \ AppData \ Roaming \ npm \ etc. Wystarczy dodać następujący wiersz:
shell = "C:\\Program Files (x86)\\git\\bin\\bash.exe"
Używana ścieżka może być dowolną prawidłową ścieżką do bash.exe. Teraz, jeśli uruchomisz powyższe polecenie „npm config ls -l | grep shell”, zobaczysz następujące dane wyjściowe wskazujące, że parametr powłoki został zastąpiony:
shell = "C:\\Program Files (x86)\\git\\bin\\bash.exe" ; shell = "C:\\WINDOWS\\system32\\cmd.exe" (overridden)
Być może pewnego dnia nowa wersja npm zwróci uwagę na nadpisany parametr powłoki.
źródło
$ npm config set shell "C:\\msys64\\usr\\bin\\bash"
;
W systemie Windows, w folderze C: \ Users \ nazwa_użytkownika \ Dodałem.npmrc
plik zawierającyshell = "C:\\Program Files\\Git\\bin\\bash.exe" script-shell = "C:\\Program Files\\Git\\bin\\bash.exe"
W tym celu użyj specjalnie utworzonego modułu node_module. Sugeruję użycie npm-run-all , ale istnieją inne , takie jak parallelshell .
Przykład Parallelshell znajduje się poniżej, aby zastąpić pytanie.
"scripts": { "parallelexample1": "parallelshell \"echo 1\" \"echo 2\" \"echo 3\"" },
następujące polecenie:
działa zarówno na windows jak i unix (Linux / MacOS).
Co ciekawe, 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:
działa zarówno na windows jak i unix (Linux / MacOS).
źródło
--parallel
opcjępo prostu używając sposobu działania CMD
.json.bat
!
.nietoperz"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/" },
źródło
W moim przypadku wystarczyło uciec
npm start
z wnętrza Basha. Biegnę,cmd
a potem otwieram bash, biegając"c:\Program Files\Git\bin\bash.exe"
. Pod powłoką basha mogłem wtedy zadzwonićnpm build
inpm start
pomyślnie.Być może masz już bash, jeśli używasz Git. Jeśli nie, możesz zainstalować .
Mam nadzieję, że to może zaoszczędzić komuś czas.
źródło
PORT=8000
Możesz także użyć wieloplatformowej powłoki PowerShell https://github.com/powershell/powershell#get-powershell dla skryptów npm.
Aby ustawić dla pojedynczego projektu, uruchom to z folderu głównego projektu:
npm config set script-shell pwsh --userconfig ./.npmrc
Aby ustawić globalnie dla wszystkich projektów węzłów:
npm config set script-shell pwsh [--global]
źródło