程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了节点文件开头的“ / usr / bin / env节点”到底做了什么?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

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

开发过程中遇到节点文件开头的“ / usr / bin / env节点”到底做了什么?的问题如何解决?下面主要结合日常开发的经验,给出你关于节点文件开头的“ / usr / bin / env节点”到底做了什么?的解决方法建议,希望对你解决节点文件开头的“ / usr / bin / env节点”到底做了什么?有所启发或帮助;

#!/usr/bin/env node是 : 在 上的可执行纯文本文件中的第一行,它告诉系统哪个解释器通过_魔术#!前缀(称为 _shebang )后的命令行 将该文件传递给执行该文件。

注: ,所以他们有效地 忽略了 那里。在windows上,它只是给定文件的 文件扩展名 ,它确定哪种可执行文件将对其进行解释。 。[1]

下面 仅限于类Unix平台:

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

  • 您 ,如果你要调用一个Node.Js的源文件, 直接 ,因为它本身就是一个可执行文件-这是假定该文件已被标记为可执行的命令,例如chmod +x ./file,然后可以让您调用文件例如,带有,./file或者,如果它位于$PATH变量中列出的目录之一中,则简称为file

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

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

这说明了给定的解释器可能安装在跨平台的不同位置的事实node,对于Node.Js二进制文件绝对是这种情况。

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

需要注意的是POSIX工具env重新利用 这里的文件名来查找,并在执行可执行文件$PATH。 的真正目的env是管理命令的环境- 请参阅envPOSIX规范

还值得注意的是,Node.Js正在对shebang行进行语法 例外 ,因为它们不是有效的JavaScript代码(#与POSIX之类的sHell和其他解释器不同,它不是JavaScript中的注释字符)。

[1]为了跨平台的一致性,在安装包文件中指定的可执行文件时(通过属性), )。本质上,这些包装批处理文件 模仿 Unix shebang功能:它们 -因此, ,

由于可以在不使用文件的情况下调用文件package.Json``"bin" __ ****

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

解决方法

#!/usr/bin/env node在一些示例的开头,我已经看到了这一行,nodejs而我在google上搜索没有找到任何可以回答该行原因的主题。

单词的性质使搜索变得不那么容易。

我读了一些javascriptnodejs书籍最近,我不记得看到它在任何人。

如果您想要一个示例,则可以查看RabbitMQ官方教程,他们几乎在所有示例中都有它,这里是其中之一:

#!/usr/bin/env node

var amqp = require('amqplib/callBACk_api');

amqp.connect('amqp://localhost',function(err,conn) {
  conn.createChAnnel(function(err,ch) {
    var ex = 'logs';
    var msg = process.argv.slice(2).join(' ') || 'Hello World!';

    ch.assertExchange(ex,'fanout',{durable: falsE});
    ch.publish(ex,'',new Buffer(msg));
    console.log(" [x] Sent %s",msg);
  });

  setTimeout(function() { conn.close(); process.exit(0) },500);
});

有人可以解释一下这行是什么意思吗?

如果放置或删除此行有什么区别?在什么情况下需要?

大佬总结

以上是大佬教程为你收集整理的节点文件开头的“ / usr / bin / env节点”到底做了什么?全部内容,希望文章能够帮你解决节点文件开头的“ / usr / bin / env节点”到底做了什么?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。