Почему node shebang работает для Angular CLI, но не для моего файла?

Почему node shebang работает для Angular CLI, но не для моего файла?

Интернет говорит мне, что Windows не поддерживает shebang lines, но, по-видимому, Angular Cuses это делает и это работает. Пример файла, который использует это и работает в Windows: https://github.com/angular/angular-cli/blob/master/packages/%40angular/cli/bin/ng

Если я открою CMD, перейду в каталог с этим файлом и просто запущу ng, Windows распознает, что его следует запустить с помощью node и выполнит (я предполагаю) node ng. Но если я попробую сделать это со своим собственным файлом, это не сработает. Пример такого файла:

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

console.log("logging test");

Если я сохраню этот файл как testи запущу его, я получу сообщение 'test' is not recognized as an internal or external command, operable program or batch file.Почему это так?

Вывод where ng:

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

решение1

Из вашего выступления where ngстановится ясно, что происходит.

Windows не поддерживает shebang-строки, так что то, что вы прочитали, верно. Windows поддерживает расширения файлов, и у вас есть исполняемое расширение.

Тыделатьесть ng, но он не запускается напрямую. ng.cmdпочти наверняка это пакетный файл, который запускает node ng.

При запуске ngWindows ищет в вашем пути все возможные форматы исполняемых файлов ( exe, bat, cmd, и т. д.) и запускает первый подходящий: ng.cmd.

Если вы хотите запустить свой скрипт, то вам придется либо запустить его как аргумент node, то есть node test, либо создать test.cmdфайл, который делает то же самое.

Связанный контент