¿Por qué node shebang funciona para Angular CLI pero no para mi archivo?

¿Por qué node shebang funciona para Angular CLI pero no para mi archivo?

Internet me dice que Windows no admite líneas shebang, pero aparentemente Angular lo usa y funciona. Ejemplo de archivo que lo usa y funciona en Windows: https://github.com/angular/angular-cli/blob/master/packages/%40angular/cli/bin/ng

Si abro CMD, navego al directorio con ese archivo y lo ejecuto simplemente ng, Windows reconocerá que debe ejecutarse con el nodo y lo ejecutará (supongo) node ng. Pero si lo intento con mi propio archivo, no funciona. Ejemplo de dicho archivo:

#!/usr/bin/env node
'use strict';

console.log("logging test");

Si guardo ese archivo testy lo ejecuto, aparece ¿ 'test' is not recognized as an internal or external command, operable program or batch file.Por qué es así?

Salida de where ng:

C:\Users\Dread\AppData\Roaming\npm\ng
C:\Users\Dread\AppData\Roaming\npm\ng.cmd

Respuesta1

De su salida where ngqueda claro lo que está sucediendo.

Windows no admite líneas shebang, por lo que lo que ha leído es correcto. Lo que Windows sí admite son extensiones de archivos y tienes una extensión ejecutable disponible.

hacertiene ngpero no se está ejecutando directamente. ng.cmdEs casi seguro que se trata de un archivo por lotes que se ejecuta node ng.

Cuando ejecuta ngWindows, busca en su ruta todos los posibles formatos de archivos ejecutables ( ,, exeetc. ) y ejecuta el primero que coincide :.batcmdng.cmd

Si desea ejecutar su script, deberá ejecutarlo como argumento para node, es decir node test, o crear un test.cmdarchivo que haga lo mismo.

información relacionada