Estoy ejecutando npm en Windows y me gustaría usar y diseñar operaciones paralelas en los scripts de ejecución, pero ejecutar en paralelo en cmd es un poco complicado en mi archivo package.json que me gustaría escribir-
scripts: { "go": "cmd1 & cmd2"}
pero npm ejecuta el script en cmd.exe que no sabe ;
. Podría cambiar esto a scripts: { "go": "bats/bat1.bat")
donde bat1.bat es un archivo cmd bat que usa la llamada al estilo de Windows o los comandos de inicio para ejecutar comandos en paralelo. que funciona pero me da un script que solo funciona en Windows.
Sería mucho más sencillo si pudiera hacer que npm ejecutara el script en un clon de bash o cygwin.
Lo intenté
config: { "shell": "bash"}
pero todavía funcionaba cmd.exe
¿Hay alguna forma de decirle a npm que ejecute scripts usando un shell específico (no cmd.exe)?
Respuestas:
Desde npm 5.1
npm config set script-shell "C:\\Program Files (x86)\\git\\bin\\bash.exe"
o (instalación de 64 bits)
npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"
Tenga en cuenta que debe tener instalado git para Windows .
Puede revertirlo ejecutando:
fuente
npm config set script-shell "C:\\Program Files\\Git\\bin\\bash.exe"
es la respuesta a todos mis problemas al ejecutar scripts en paralelo en Windows 10 de 64 bits. @DuncanSungWKim 감사 합니다 para esto.npm run <script
esta configuración, se genera una nueva ventana de git bash ejecutando el script. Esto no es lo que quiero. ¿Hay alguna forma de invocar simplemente el shell dentro del shell de llamada?He aquí una forma de hacerlo:
En su archivo package.json, agregue una línea para ejecutar el script usando bash. Por ejemplo:
"scripts": { "boogie": "bash bin/my_script.sh" }
Ahora puede ejecutar su script bash desde npm mediante:
No es muy elegante, pero funciona.
Si está desarrollando tanto en Windows como en Linux / Unix, al menos este enfoque es bastante portátil para ambos entornos.
fuente
"scripts": { "start": "node ./bin/www", "bash": "bash -c", "ls": "npm run bash ls" }
Idealmente, anular el parámetro de configuración de shell npm debería funcionar, pero npm (al menos la versión 1.4.14) parece en Windows ignorar la configuración y usar cmd.exe en su lugar.
Utilice el siguiente comando en su shell bash o Git Bash para averiguar la configuración del shell:
Por defecto, la salida será:
shell = "C:\\WINDOWS\\system32\\cmd.exe"
Sin embargo, para anular el parámetro de shell predeterminado, puede agregar (o editar) un archivo npmrc al directorio \ Users \ yourusername \ AppData \ Roaming \ npm \ etc. Simplemente agregue la siguiente línea:
shell = "C:\\Program Files (x86)\\git\\bin\\bash.exe"
La ruta que utilice puede ser cualquier ruta válida a bash.exe. Ahora, si ejecuta el comando "npm config ls -l | grep shell" anterior, verá el siguiente resultado, que indica que el parámetro de shell ha sido anulado:
shell = "C:\\Program Files (x86)\\git\\bin\\bash.exe" ; shell = "C:\\WINDOWS\\system32\\cmd.exe" (overridden)
Quizás algún día, una nueva versión de npm prestará atención al parámetro de shell anulado.
fuente
$ npm config set shell "C:\\msys64\\usr\\bin\\bash"
;
En Windows, en la carpeta C: \ Users \ username \.npmrc
shell = "C:\\Program Files\\Git\\bin\\bash.exe" script-shell = "C:\\Program Files\\Git\\bin\\bash.exe"
simplemente usando la forma de ejecutar CMD
.json.bat
!
.murciélago"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/" },
fuente
Utilice un módulo_nodo creado específicamente para este propósito. Sugiero con NPM-run-todo , pero los demás existe, como parallelshell .
A continuación, se muestra un ejemplo de Parallelshell para el reemplazo directo de su pregunta.
"scripts": { "parallelexample1": "parallelshell \"echo 1\" \"echo 2\" \"echo 3\"" },
siguiente comando:
funciona tanto en Windows como en Unix (Linux / MacOS).
Curiosamente, npm-run-all no admite comandos de shell; por lo tanto, debemos colocar todos los comandos de shell en secuencias de comandos separadas como se muestra a continuación.
"scripts": { "parallelexample2": "npm-run-all echo*", "echo1": "echo 1", "echo2": "echo 2", "echo3": "echo 3" },
Siguiente comando:
funciona tanto en Windows como en Unix (Linux / MacOS).
fuente
--parallel
opciónEn mi caso, solo necesitaba correr
npm start
desde dentro de Bash. Corro ycmd
luego abro bash corriendo"c:\Program Files\Git\bin\bash.exe"
. Bajo bash shell pude llamarnpm build
y connpm start
éxito.Es posible que ya tenga bash si está utilizando Git. Si no es así, puede instalarlo .
Espero que esto pueda ahorrarle tiempo a alguien.
fuente
PORT=8000
También puede usar powershell multiplataforma https://github.com/powershell/powershell#get-powershell para scripts npm.
Para configurar un solo proyecto, ejecute esto desde la carpeta raíz del proyecto:
npm config set script-shell pwsh --userconfig ./.npmrc
Para configurar globalmente para todos los proyectos de nodo:
npm config set script-shell pwsh [--global]
fuente