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

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


文章目录

  • 前言
  • 一、#!/usr/bin/env node是什么?
  • 二、那我来?
    • 1. 第一步:查Wiki
    • 2. 第2步:往下查
  • 总结


前言

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

#! /usr/bin/env node

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


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

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

当我看到 #!/usr/bin/env node 出现 在一些示例的开头,我选择了百度,But 。。。
js文件头部 #!/usr/bin/env node 到底执行什么了_第1张图片
emem。。。。 我并没有找到很理想的答案。
js文件头部 #!/usr/bin/env node 到底执行什么了_第2张图片

二、那我来?

好吧,一不做,二不休

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来执行

js文件头部 #!/usr/bin/env node 到底执行什么了_第3张图片

扩展:

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

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

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

总结

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

你可能感兴趣的:(Node.js,javascript,前端,开发语言)