为什么 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 运行并执行(我假设)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、、等)并运行第一个匹配的格式:。batcmdng.cmd

如果您想运行脚本,那么您必须将其作为参数运行node,即node test,或者创建test.cmd执行相同操作的文件。

相关内容