#!/usr/bin/env nodeshebang line的一个实例:用在Unix-like的平台上的可执行纯文本文件中的第一行,它通过#!前缀(称为shebang)命令行告诉系统哪个解释器将该文件传递给执行程序。

Windows不支持shebang lines,因此实际上它们被忽略。 在Windows上,它只是给定文件的文件扩展名,它确定哪种可执行文件将对其进行解释。 但是,您仍然需要在npm上下文中使用它们[1]

下面是仅限于类Unix平台对shebang line的一般讨论:

在下面的讨论中,我将假定包含要由Node.js执行的源代码的文件简称为file

  • 如果要直接调用Node.js源文件作为可执行文件,则需要此行,它本身就是可执行文件-假定已使用chmod + x ./file等命令将该文件标记为可执行文件,然后允许您使用例如./file调用文件,或者如果它位于$PATH变量中列出的目录之一中,则以file的形式调用。
  • 通过node解释器显式调用文件,则不需要此行,例如node ./file

[1]为了跨平台一致性,npm在安装程序包的package.json文件中指定的可执行文件时(通过"bin"属性)在Windows上创建包装器*.cmd文件(批处理文件)。 本质上,这些包装批处理文件模仿Unix shebang功能:它们使用shebang line中指定的可执行文件显式调用目标文件-因此,即使您只打算在Windows上运行它们,您的脚本也必须包含shebang行。

由于*.cmd文件可以在不带.cmd扩展名的情况下调用,因此可以提供无缝的跨平台体验:在Windows和Unix上,您都可以使用其原始的无扩展名有效地调用npm安装的CLI。

What exactly does “/usr/bin/env node” do at the beginning of node files?