js文件头部 #!/usr/bin/env node 到底执行什么了

本文介绍了Shebang(#!/usr/bin/env node)在脚本中的作用,解释了其用于标识脚本可执行性的功能。在Unix系统中,以Shebang开头的文件会被当作脚本来运行。#!/usr/bin/env node确保在任何路径下都能找到node执行器,实现跨平台一致性。文章还提及了在Windows上npm如何创建包装器以模拟Shebang功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

👨 作者简介:大家好,我是Taro,前端领域创作者
✒️ 个人主页:唐璜Taro
🚀 支持我:点赞👍+📝 评论 + ⭐️收藏



前言

平时我们在做 CLi 脚手架的时候,通常需要在入口文件的先加入这样一行代码

#! /usr/bin/env node

有无此行什么区别?在什么情况下需要?


提示:以下是本篇文章正文内容,下面案例可供参考

一、#!/usr/bin/env node是什么?

当我看到 #!/usr/bin/env node 出现 在一些示例的开头,我选择了百度,But 。。。
在这里插入图片描述
emem。。。。 我并没有找到很理想的答案。
在这里插入图片描述

二、那我来?

好吧,一不做,二不休

1. 第一步:查Wiki

In computing, a shebang is the character sequence consisting of the
characters number sign and exclamation mark (#!) at the beginning of a
script.

看懂了没?大致意思就是 说了一下 #! 它叫shebang ,中文版发音(谁罢),起到标识的作用,说明这个文件可以当做脚本来运行

看来重点不在它身上,,,

又深入了搜一把,在Unix OS中,如果文件是#! 开头的,就会当成执行文件来运行,如果在执行脚本,这行就是注释

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);
});

2. 第2步:往下查

/usr/bin/env node 干什么了?

之前提到 #! 是标注文件可以当做脚本运行的,那么怎么运行呢,

/usr/bin/env 代表了绝对地址;node 代表了需要使用执行器类型,

不同用户可能在安装 node 时 放在了不同的盘符下,甚至MAC和WIndows系统还不一样。

那么我们如何确保准确的找到呢?

一般我们都在在环境变量中找node执行器,,所以就能正确找到node来执行

在这里插入图片描述

扩展:

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

由于可以在不使用文件的情况下调用文件package.json 中的 “bin”

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

总结

提示:以上就是今天要讲的内容,本文仅仅简单介绍了 shebang 的作用

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值