互联网告诉我 Windows 不支持 shebang 行,但显然 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
。
当您运行时,Windowsng
会在您的路径中搜索所有可能的可执行文件格式(exe
、、等)并运行第一个匹配的格式:。bat
cmd
ng.cmd
如果您想运行脚本,那么您必须将其作为参数运行node
,即node test
,或者创建test.cmd
执行相同操作的文件。