Tengo un script de nodo cuyo trabajo es montar una aplicación que he creado. Crea archivos y carpetas y luego ejecuta una serie de comandos de nodo. Todo funciona perfectamente. Estos son los comandos que se ejecutan:
const postInstCmds = [ 'npm init -y', 'npm install http-server --save-dev', 'npx add-npm-scripts server "http-server"', 'npm run server' ]; postInstCmds.forEach(cmd => execSync(cmd, {cwd: appDir})); console.log('Done!'); Sin embargo, en la terminal, parece colgarse del penúltimo comando ( npx ), aunque ejecuta el comando final npm run server (porque la aplicación creada está disponible en localhost: 8080). Presumiblemente, por la misma razón, nunca veo mi "¡Listo!" Iniciar sesión. Esto es lo que veo:
¿Cómo puedo hacer que el terminal complete los comandos sin depender del npx ?
Nunca ve "Terminado" porque el último comando nunca sale. El penúltimo comando, de hecho, sale. Sabemos esto porque, de lo contrario, el último comando no se ejecutaría (ya que está utilizando execSync() y se bloqueará hasta que el comando finalice) y no tendría su servidor en ejecución.
Lo que parece estar sucediendo es que solo está viendo STDERR y no STDOUT. Sin ver el resto de su código, no puedo decir exactamente por qué sucede eso, pero una posible solución fácil podría ser especificar que todo stdio debe ser heredado.
postInstCmds.forEach(cmd => execSync(cmd, {cwd: appDir, stdio: 'inherit'}));