Warum funktioniert Node Shebang für Angular CLI, aber nicht für meine Datei?

Warum funktioniert Node Shebang für Angular CLI, aber nicht für meine Datei?

Das Internet sagt mir, dass Windows keine Shebang-Zeilen unterstützt, aber anscheinend verwendet Angular sie und es funktioniert. Beispiel einer Datei, die sie verwendet und unter Windows funktioniert: https://github.com/angular/angular-cli/blob/master/packages/%40angular/cli/bin/ng

Wenn ich CMD öffne, zum Verzeichnis mit dieser Datei navigiere und sie einfach ausführe ng, erkennt Windows, dass sie mit node ausgeführt werden soll und wird ausgeführt (nehme ich an) node ng. Aber wenn ich das mit meiner eigenen Datei versuche, funktioniert es nicht. Beispiel für eine solche Datei:

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

console.log("logging test");

Wenn ich die Datei unter „+“ speichere testund ausführe, erhalte ich die Meldung „ 'test' is not recognized as an internal or external command, operable program or batch file.Warum ist das so?“

Ausgabe von where ng:

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

Antwort1

Aus Ihrer Ausgabe where nggeht klar hervor, was passiert.

Windows unterstützt keine Shebang-Zeilen, also ist das, was Sie gelesen haben, richtig. Was Windows unterstützt, sind Dateierweiterungen, und Ihnen steht eine ausführbare Erweiterung zur Verfügung.

DuTunhabe ng, aber es wird nicht direkt ausgeführt. ng.cmdist fast sicher eine Batchdatei, die ausgeführt wird node ng.

Beim Ausführen ngvon Windows wird Ihr Pfad nach allen möglichen ausführbaren Dateiformaten ( exe, bat, cmd, usw.) durchsucht und das erste passende ausgeführt: ng.cmd.

Wenn Sie Ihr Skript ausführen möchten, müssen Sie es entweder als Argument für ausführen node, d. h. node test, oder eine test.cmdDatei erstellen, die dasselbe tut.

verwandte Informationen