作者简介:大家好,我是Taro,前端领域创作者
✒️ 个人主页:唐璜Taro
支持我:点赞+ 评论 + ⭐️收藏
平时我们在做 CLi 脚手架的时候,通常需要在入口文件的先加入这样一行代码
#! /usr/bin/env node
有无此行什么区别?在什么情况下需要?
提示:以下是本篇文章正文内容,下面案例可供参考
当我看到 #!/usr/bin/env node
出现 在一些示例的开头,我选择了百度,But 。。。
emem。。。。 我并没有找到很理想的答案。
好吧,一不做,二不休
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);
});
那 /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 的作用