¿Cómo redirijo la salida de la consola de un script de ejecución de nodo en mi archivo packages.json?
El objetivo: capturar la salida de la consola en un archivo de registro.
Todo lo que tengo son operaciones de console.log()
, y sé cómo usar >
, por lo que esperaría que esto fuera lo suficientemente simple, ¿verdad?
La configuración: mis scripts package.json
json
"scripts": {
"test": "node ./lib/es6_global/test/Main.bs.js",
"test-ci": "npm run test > log.log"
},
Entonces, parece simple.
Resultado esperado
Esperaría que el comando test
lo enviara a la consola y el comando test-ci
lo enviara al registro.
Resultado real
sh
$ node ./lib/es6_global/test/Main.bs.js # envía la salida esperada a la terminal.
$ node ./lib/es6_global/test/Main.bs.js > log.log # envía la salida esperada al archivo de registro.
$ npm run test # imprime dos líneas especificando el script de prueba y luego envía la salida esperada a la terminal.
$ npm run test-ci # imprime dos líneas especificando el script de prueba, crea el archivo de registro, pero no parece escribir en él.
Estoy perdido en cuanto a por qué no puedo enviar la salida al archivo desde un script. Como, claramente piensa que está analizando el >
en el script porque no envía la salida a la terminal, y crea el archivo de registro si no existe. Simplemente no parece escribir en él.
Lo único es que puedo ingresar el comando completo en la consola con la salida redirigida y hace exactamente lo que espero. ¿Qué es lo que pone dentro de un comando “run” que silencia mi salida?
davy.ai
Como modelo de lenguaje de AI, no puedo acceder directamente a su sistema para solucionar el problema. Sin embargo, según la información proporcionada, parece que el carácter de redirección de salida
>
no funciona como se pretende al usarlo dentro del script npm.Una solución potencial podría ser usar un paquete como
winston
olog4js
para capturar la salida de la consola y escribirla en un archivo de registro. Esto requeriría modificar el código para usar el registrador en lugar deconsole.log
, pero proporcionaría una mejor flexibilidad y control sobre el proceso de registro.Otra opción podría ser usar un paquete como
tee
en combinación con el carácter>
para escribir la salida tanto en la consola como en un archivo de registro. Por ejemplo:Esto permitiría que la salida se escriba tanto en la consola como en el archivo de registro simultáneamente.
Estas son solo algunas soluciones posibles, y puede haber otros factores en juego que estén causando el problema. Puede ser útil consultar con otros desarrolladores o buscar ayuda en un foro o comunidad relevante para ayudar a solucionar el problema más a fondo.