En mi package.json
tengo estos dos scripts:
"scripts": {
"start-watch": "nodemon run-babel index.js",
"wp-server": "webpack-dev-server",
}
Tengo que ejecutar estos 2 scripts en paralelo cada vez que empiezo a desarrollar en Node.js. Lo primero que pensé fue agregar un tercer script como este:
"dev": "npm run start-watch && npm run wp-server"
... pero eso esperará a start-watch
que termine antes de correr wp-server
.
¿Cómo puedo ejecutar estos en paralelo? Tenga en cuenta que necesito ver output
estos comandos. Además, si su solución involucra una herramienta de compilación, prefiero usarla en gulp
lugar de grunt
porque ya la uso en otro proyecto.
javascript
node.js
build
André Pena
fuente
fuente
&&
ejecutará sus scripts secuencialmente mientras&
los ejecutará en paralelo .npm run start-watch & npm run wp-server
. Esto ejecutará el primer comando como un hilo de fondo. Esto funciona realmente bien cuando uno de los comandos no se está ejecutando por mucho tiempo y no es necesario salir manualmente más tarde. Algo así leconcurrently
permite matar todos los hilos al mismo tiempo con CTRL-C.Respuestas:
Use un paquete llamado simultáneamente .
npm i concurrently --save-dev
Luego configure su
npm run dev
tarea de la siguiente manera:fuente
node ./node_modules/concurrently/src/main.js
no es necesario.concurrent
funcionará bien en los scripts porque el módulo instala un bin para./node_modules/.bin/concurrent
concurrently
use múltiples transmisiones que se metan con la salida de la consola (los colores pueden ser extraños, el cursor desaparecido) mientrasparallelshell
que no tiene ese problema .--raw
modo para preservar los colores en la salida.Si está utilizando un entorno similar a UNIX, simplemente utilícelo
&
como separador:De lo contrario, si está interesado en una solución multiplataforma, puede usar el módulo npm-run-all :
fuente
a && b
comienzab
después dea
finalizar con éxito, pero nodemon nunca se detiene sin errores, por lo que eso no puede funcionar.a & b
comienzaa
, lo mueve al fondo y comienza deb
inmediato. ¡Ganar!a | b
canaliza la salidaa
estándar a la entrada estándar, lob
que requiere que ambos se ejecuten simultáneamente. Aunque parezca tener el efecto deseado, no debe usarlo aquí.&
es una muy mala idea, ya que separa el proceso. Significa quenpm
ya no será el proceso padre. Terminarás con un zombie con elnpm run start-watch
que no matarásctrl-c
.wait
para mitigar el problema con los procesos colgantes:"dev": "npm run start-watch & npm run wp-server & wait"
&
en unix evita que el comando responda a Cc / Cz y también evita que su código de retorno se propague en caso de falla.Desde Windows cmd puedes usar
start
:Cada comando lanzado de esta manera comienza en su propia ventana.
fuente
&&
espera a que termine el primer comando antes de iniciar el segundo comando y una tarea de observador nunca finalizará.Debería usar npm-run-all (o
concurrently
,parallelshell
), porque tiene más control sobre los comandos de inicio y finalización. Los operadores&
,|
son malas ideas, dado que tiene que parar manualmente después de que todas las pruebas se terminaron.Este es un ejemplo para las pruebas de transportador a través de npm:
-p
= Ejecutar comandos en paralelo.-r
= Mata todos los comandos cuando uno de ellos termina con un código de salida de cero.La ejecución
npm run test
iniciará el controlador Selenium, iniciará el servidor http (para servirle los archivos) y ejecutará pruebas de transportador. Una vez que todas las pruebas hayan finalizado, cerrará el servidor http y el controlador de selenio.fuente
gulp
ygulp-sync
?Puede usar uno
&
para el script de ejecución paralelaLink de referencia
fuente
Una mejor solución es usar
&
fuente
&
funciona en Windows, pero funciona de manera diferente. En OSX, ejecutará ambos comandos al mismo tiempo, pero en Windows, ejecutará el primer comando, y después de que exista el primer comando, ejecutará el segundo comando.He comprobado casi todas las soluciones anteriores y solo con npm-run-all pude resolver todos los problemas. La principal ventaja sobre todas las demás soluciones es la capacidad de ejecutar secuencias de comandos con argumentos .
Esto me permite ejecutar comandos con argumentos como
npm run test:watch -- Something
.EDITAR:
Hay una opción más útil para
npm-run-all
:Agregue
-r
a sunpm-run-all
script para eliminar todos los procesos cuando uno termine con el código0
. Esto es especialmente útil cuando ejecuta un servidor HTTP y otro script que usa el servidor.fuente
Tengo una solución de plataforma cruzada sin módulos adicionales . Estaba buscando algo como un bloque try catch que podría usar tanto en cmd.exe como en bash.
La solución es la
command1 || command2
que parece funcionar en ambos entornos. Entonces la solución para el OP es:¡Entonces simple
npm start
(ynpm run dev
) funcionará en todas las plataformas!fuente
Si reemplaza el doble ampersand con un solo ampersand, los scripts se ejecutarán simultáneamente.
fuente
Solución rápida
En este caso, diría que es la mejor opciónsi este script es para un módulo privado destinado a ejecutarse solo en máquinas basadas en * nix , puede usar el operador de control para los procesos de bifurcación, que se ve así:&
Un ejemplo de hacer esto en un archivo package.json parcial:
Luego los ejecutarías a ambos en paralelo a través de
npm run serve-bundle
. Puede mejorar los scripts para generar los pids del proceso bifurcado en un archivo de esta manera:Google algo así como el operador de control bash para bifurcación para aprender más sobre cómo funciona. También proporcioné un contexto adicional sobre el aprovechamiento de las técnicas de Unix en los proyectos Node a continuación:
Contexto adicional RE: Unix Tools & Node.js
Si no está en Windows, las herramientas / técnicas de Unix a menudo funcionan bien para lograr algo con los scripts de Node porque:
Los módulos para tareas de sistema en Nodeland también son a menudo abstracciones o aproximaciones de herramientas Unix, desde
fs
hastastreams
.fuente
&
operador no es compatible con Windows.editar:
Debe tener npm-run-all instalado de antemano. Consulte también esta página para ver otros escenarios de uso.
fuente
¿Qué hay de bifurcación
Otra opción para ejecutar múltiples scripts de Nodo es con un solo script de Nodo, que puede bifurcar muchos otros. La bifurcación se admite de forma nativa en Node, por lo que no agrega dependencias y es multiplataforma.
Ejemplo mínimo
Esto solo ejecutaría los scripts tal cual y supondría que están ubicados en el directorio del script principal.
Ejemplo detallado
Esto ejecutaría los scripts con argumentos y configurados por las muchas opciones disponibles.
Comunicación con guiones bifurcados
Forking también tiene el beneficio adicional de que el script primario puede recibir eventos de los procesos secundarios bifurcados, así como también enviarlos de regreso. Un ejemplo común es que el script padre mate a sus hijos bifurcados.
Para más eventos y métodos disponibles, consulte la
ChildProcess
documentaciónfuente
Me encontré con problemas
&
y|
, que salen de los estados y arrojan errores, respectivamente.Otras soluciones quieren ejecutar cualquier tarea con un nombre de pila, como npm-run-all, que no era mi caso de uso.
Así que creé npm-run-parallel que ejecuta scripts npm de forma asincrónica e informa cuando están listos.
Entonces, para sus guiones, sería:
npm-run-parallel wp-server start-watch
fuente
En mi caso tengo dos proyectos, uno era UI y el otro era API , y ambos tienen su propio script en sus respectivos
package.json
archivos.Entonces, esto es lo que hice.
fuente
node app
) y API (Angular en una subcarpeta src , supongocd src/ng serve
), solo funciona la primera parte. Por ejemplonode app& cd src& ng serve
.package.json:
Más información: https://github.com/mysticatea/npm-run-all/blob/master/docs/npm-run-all.md
fuente
He estado usando npm-run-all durante algún tiempo, pero nunca me llevé bien con él, porque la salida del comando en modo reloj no funciona bien juntos. Por ejemplo, si empiezo
create-react-app
yjest
en modo de observación, solo podré ver el resultado del último comando que ejecuté. Así que la mayoría de las veces, estaba ejecutando todos mis comandos manualmente ...Por eso, implemento mi propia lib, run-screen . Todavía es un proyecto muy joven (de ayer: p) pero podría valer la pena mirarlo, en su caso sería:
Luego presiona la tecla numérica
1
para ver la salida dewp-server
y presiona0
para ver la salida destart-watch
.fuente
Mi solución es similar a la de Piittis, aunque tuve algunos problemas al usar Windows. Entonces tuve que validar para win32.
fuente
Script de nodo simple para que pueda comenzar sin demasiados problemas. Usando readline para combinar salidas para que las líneas no se rompan.
fuente
este trabajo en windows
fuente