如果脚本是供 node 开发人员使用的,那么绝对应该使用
#!/usr/bin/env node
而且不必费心try 与那些只安装了nodejs
个 node 的人兼容.
理论基础:
- 如果你不酷,子元素们做什么.像jshint、karma、bower甚至npm这样的主要 node 项目只是使用
#!/usr/bin/env node
作为可执行脚本的shebang.
- 因为酷炫的子元素们正在这么做,任何在Ubuntu上使用Node的人都会将
/usr/bin/node
设置为nodejs
的符号链接.在堆栈溢出和整个web上都有highly-viewed instructions个这样做的例子.甚至还有nodejs-legacy
软件包,其全部目的是为您创建这个符号链接.使用Node的人知道如何在Ubuntu上解决这个问题,如果他们想使用Node上编写的几乎所有软件,他们都知道.
- 在Ubuntu 14.04上,这个问题似乎已经不存在了;我刚刚清除了 node ,运行了一个
apt-get install nodejs
,它创建了/usr/bin/node
作为/etc/alternatives/node
的符号链接.我怀疑,受这个问题困扰的人是越来越少的少数群体.
即使你的目标是不懂 node 的人,你可能仍然想使用#!/usr/bin/env node
,如果你认为有必要的话,可能还需要手动创建符号链接或在安装文档中安装nodejs-legacy
软件包.请注意,如果有人使用nodejs
但没有node
可用,试图使用上述shebang运行您的程序,他们将看到:
/usr/bin/env:node:没有这样的文件或目录
Googling that将在第一个结果中给出修复,并在第一页上多次给出修复.
如果你真的非常想确保用户可以在nodejs
可用但node
不可用(或者node
实际上是Amateur Packet Radio Node program)的系统上运行你的软件,那么你可以使用Unix & Linux Stack Exchange中的"两行shebang":
#!/bin/sh
':' //; exec "$(command -v nodejs || command -v node)" "$0" "$@"
console.log('Hello world!');
但是,当 node 世界中几乎没有其他人这样做时,您真的需要这样做吗?