Digamos que tengo
"scripts": {
"pre-build": "echo \"Welcome\" && exit 1",
"build_logic": "start cmd.exe @cmd /k \"yo esri-appbuilder-js:widget && exit 1\"",
"post_build": "start C:\\WebAppBuilderForArcGIS\\startupShortcut",
"exit" : "start cmd.exe @cmd /k \"echo \"goodbye\" && exit 1\""
},
¿Qué comando NPM puedo ejecutar para permitir que todos estos scripts se ejecuten secuencialmente? Cuando uso la corrección previa / posterior, se inician secuencialmente pero no esperan a que el script principal termine antes de ejecutarse. Supongo que la única solución es: ¿Cómo hago que las tareas de Gulp se activen secuencialmente al disparar comandos de shell en una función auxiliar async.series? ? Sé que esto se puede hacer con Gulp, pero me gustaría seguir con NPM por ahora para explorar sus capacidades. ¡Gracias por cualquier ayuda!
javascript
node.js
npm
cmd
Arroz
fuente
fuente
Start
comando, debe poder usar el/wait
parámetro (Iniciar la aplicación y esperar a que termine)Respuestas:
Invoque estos scripts a través de npm run y encadénelos con doble ampersand
&&
:Explicación:
&&
(doble ampersand) para ejecución secuencial.&
(ampersand simple) para ejecución paralela.fuente
&&
son evaluados por el shell y no funcionan en Windows.&&
sintaxis es una construcción UNIX. Se comportará incorrectamente en las máquinas de Windows, con consecuencias potencialmente graves para su proceso de compilación.npm-run-all
documentos: "a veces usamos&
para ejecutar comandos múltiples en paralelo, pero Windows 'cmd.exe
... no es compatible con [este operador]". Así que parece que tenías razón: al menos, según mi breve investigación, el&&
operador parece perfectamente compatible con todas las plataformas.Siguiendo la excelente respuesta de @ Mobiletainment , también puede usar npm-run-all para hacer el comando mucho más corto y mucho más legible. En tu caso:
run-s
es un acceso directo quenpm-run-all
proporciona, que ejecuta todos los npm-scripts dados secuencialmente, de ahí que-s
(run-s
es una versión más corta denpm-run-all -s
).fuente
Podrías encadenarlos en otro script.
"start": "pre-build && build_logic && post_build && exit"
fuente
start
comando que está ejecutando en Windows técnicamente está terminado. Use la/wait
bandera constart
para forzar que lastart
aplicación permanezca abierta hasta que el método interno también haya finalizado.start notepad
desde el símbolo del sistema, luego eche un vistazo al símbolo del sistema original. Debería poder escribir otro comando. Entonces correstart /wait notepad
. Elstart
comando debe continuar "ejecutándose" mientras la ventana de su bloc de notas está abierta (vuelva a mirar el símbolo del sistema). Luego, una vez que cierre el bloc de notas,start
estará terminado.Puede prefijar las secuencias de comandos
pre
ypost
para que se ejecute de forma automática:entonces corre
npm run build
fuente
puedes probar:
fuente
Puede usar npm-run-all para combinar múltiples comandos de muchas maneras diferentes
Por ejemplo, si tenía los siguientes scripts en su
package.json
:Podrías ejecutarlos todos secuencialmente de esta manera:
Vea esta pregunta sobre cómo ejecutar múltiples comandos npm en paralelo
fuente