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 test
und 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 ng
geht 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.cmd
ist fast sicher eine Batchdatei, die ausgeführt wird node ng
.
Beim Ausführen ng
von 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.cmd
Datei erstellen, die dasselbe tut.