為什麼 node shebang 適用於 Angular CLI 但不適用於我的文件?

為什麼 node shebang 適用於 Angular CLI 但不適用於我的文件?

互聯網告訴我 Windows 不支援 shebang 線,但顯然 Angular Cuses 它並且它可以工作。使用它並在 Windows 上運行的文件範例: https://github.com/angular/angular-cli/blob/master/packages/%40angular/cli/bin/ng

如果我打開 CMD,導航到包含該文件的目錄並簡單地運行ng,Windows 將識別它應該與節點一起運行並執行(我推測)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 時,會在您的路徑中搜尋所有可能的可執行檔格式(exebatcmd等)並執行第一個符合的:ng.cmd.

如果您想運行腳本,則必須將其作為nodeie的參數運行node test,或建立test.cmd具有相同功能的檔案。

相關內容