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

1

A Internet está me dizendo que o Windows não suporta linhas shebang, mas, aparentemente, o Angular o cativa e funciona. Exemplo de arquivo que o utiliza e funciona no Windows: link

Se eu abrir o CMD, navegue até o diretório com esse arquivo e execute simplesmente ng , o Windows reconhecerá que ele deve ser executado com o nó e será executado (suponho) node ng . Mas se eu tentar isso com meu próprio arquivo, não funciona. Exemplo de tal arquivo:

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

console.log("logging test");

Se eu salvar esse arquivo como test e executá-lo, receberei '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
    
por Dread Boy 11.10.2017 / 08:13

1 resposta

2

Da sua saída de where ng , está claro o que está acontecendo.

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

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

Quando você executar ng , o Windows pesquisou o caminho para todos os formatos possíveis de arquivos executáveis ( exe , bat , cmd , etc) e executou o primeiro que correspondeu: ng.cmd .

Se você deseja executar seu script, será necessário executá-lo como um argumento para node , ou seja, node test ou criar um arquivo test.cmd que faça o mesmo.

    
por 11.10.2017 / 08:59