栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

节点文件开头的“ / usr / bin / env节点”到底做了什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

节点文件开头的“ / usr / bin / env节点”到底做了什么?

#!/usr/bin/env node

shebang行的
一个实例类Unix平台
上的可执行纯文本文件中的第一行,它告诉系统哪个解释器通过_魔术
#!
前缀(称为 _shebang
)后的命令行 将该文件传递给执行该文件。

注: 的Windows没有 支持家当线,所以他们有效地 忽略了 那里。在Windows上,它只是给定文件的 文件扩展名
,它确定哪种可执行文件将对其进行解释。 但是,您仍然需要在中使用它们

npm
。[1]

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

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

file

  • 需要此行 ,如果你要调用一个Node.js的源文件, 直接 ,因为它本身就是一个可执行文件-这是假定该文件已被标记为可执行的命令,例如

    chmod +x ./file
    ,然后可以让您调用文件例如,带有,
    ./file
    或者,如果它位于
    $PATH
    变量中列出的目录之一中,则简称为
    file

    • 具体来说,您需要一个shebang行,以作为npm 软件包的 一部分基于Node.js源文件创建 CLI ,并根据软件包文件中密钥的值来安装CLI ;了解如何与 全局 安装的软件包一起使用。脚注[1]显示了如何在Windows上进行处理。
      npm
      "bin"``package.json
    • 不需要 此行即可通过
      node
      解释器显式调用文件,例如,
      node ./file

可选背景信息

#!/usr/bin/env <executableName>
是一种 可移植地
指定解释器的方法:简而言之,它说:
<executableName>
$PATH
变量中列出的目录中的任何位置(首先)找到它(然后将其隐式传递到手边的文件)都执行。

这说明了给定的解释器可能安装在跨平台的不同位置的事实

node
,对于Node.js二进制文件绝对是这种情况。

相比之下,

env
实用程序本身的位置可以依赖于跨平台的 相同 位置,即
/usr/bin/env
-并且在shebang行中 需要
指定可执行文件的 完整 路径。 __

需要注意的是POSIX工具

env
重新利用 这里的文件名来查找,并在执行可执行文件
$PATH

的真正目的
env
是管理命令的环境-
请参阅
env
POSIX规范


还值得注意的是,Node.js正在对shebang行进行语法 例外
,因为它们不是有效的Javascript代码(

#
与POSIX之类的shell和其他解释器不同,它不是Javascript中的注释字符)。


[1]为了跨平台的一致性,在安装包文件中指定的可执行文件时(通过属性), 在Windows上

npm
创建 包装器
*.cmd
文件(批处理文件
)。本质上,这些包装批处理文件 模仿 Unix shebang功能:它们
使用shebang行中指定的可执行文件显式调用目标文件 -因此, 即使您只打算在Windows上运行它们
您的脚本也必须包含shebang行

由于可以在不使用文件的情况下调用文件

package.json``"bin"
__ ****


*.cmd``.cmd
扩展名,这提供了无缝的跨平台体验:在Windows和Unix上,您都可以
npm
使用其原始的无扩展名有效地调用安装的CLI。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/382057.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号