En mi package.jsontengo 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-watchque termine antes de correr wp-server.
¿Cómo puedo ejecutar estos en paralelo? Tenga en cuenta que necesito ver outputestos comandos. Además, si su solución involucra una herramienta de compilación, prefiero usarla en gulplugar de gruntporque 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í leconcurrentlypermite matar todos los hilos al mismo tiempo con CTRL-C.Respuestas:
Use un paquete llamado simultáneamente .
npm i concurrently --save-devLuego configure su
npm run devtarea de la siguiente manera:fuente
node ./node_modules/concurrently/src/main.jsno es necesario.concurrentfuncionará bien en los scripts porque el módulo instala un bin para./node_modules/.bin/concurrentconcurrentlyuse múltiples transmisiones que se metan con la salida de la consola (los colores pueden ser extraños, el cursor desaparecido) mientrasparallelshellque no tiene ese problema .--rawmodo 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 && bcomienzabdespués deafinalizar con éxito, pero nodemon nunca se detiene sin errores, por lo que eso no puede funcionar.a & bcomienzaa, lo mueve al fondo y comienza debinmediato. ¡Ganar!a | bcanaliza la salidaaestándar a la entrada estándar, lobque 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 quenpmya no será el proceso padre. Terminarás con un zombie con elnpm run start-watchque no matarásctrl-c.waitpara 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 testiniciará 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
gulpygulp-sync?Puede usar uno
¶ 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
-ra sunpm-run-allscript 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 || command2que 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
fshastastreams.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
ChildProcessdocumentació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-watchfuente
En mi caso tengo dos proyectos, uno era UI y el otro era API , y ambos tienen su propio script en sus respectivos
package.jsonarchivos.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-appyjesten 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
1para ver la salida dewp-servery presiona0para 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