Por que o node shebang funciona para Angular CLI, mas não para meu arquivo?

Por que o node shebang funciona para Angular CLI, mas não para meu arquivo?

A Internet está me dizendo que o Windows não suporta linhas shebang, mas aparentemente o Angular Cuses e funciona. Exemplo de arquivo que utiliza e funciona no Windows: https://github.com/angular/angular-cli/blob/master/packages/%40angular/cli/bin/ng

Se eu abrir o CMD, navegar até o diretório com esse arquivo e executar simplesmente ng, o Windows reconhecerá que ele deve ser executado com o nó e executará (presumo) node ng. Mas se eu tentar isso com meu próprio arquivo, não funcionará. Exemplo desse arquivo:

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

console.log("logging test");

Se eu salvar esse arquivo como teste executá-lo, recebo 'test' is not recognized as an internal or external command, operable program or batch file.Por que isso acontece?

Saída de where ng:

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

Responder1

Pela sua saída where ngfica claro o que está acontecendo.

O Windows não suporta linhas shebang, então o que você leu está correto. O que o Windows suporta são extensões de arquivo e você tem uma extensão executável disponível.

Vocêfazertem ng, mas não está sendo executado diretamente. ng.cmdé quase certamente um arquivo em lote que executa node ng.

Quando você executa ngo Windows, pesquisou em seu caminho todos os formatos de arquivo executáveis ​​​​possíveis ( exe, bat, cmd, etc) e executou o primeiro que correspondesse: ng.cmd.

Se quiser executar seu script, você terá que executá-lo como um argumento para node, ou seja node test, ou criar um test.cmdarquivo que faça o mesmo.

informação relacionada