适用于node.js脚本的hashbang
我正在尝试为node.js创build一个可以在多个环境中工作的脚本。 特别是对于我来说,我在OS X和Ubuntu之间来回切换。 在前者中,节点被安装为node
,而后者则是nodejs
。 在我的脚本的顶部,我可以有:
#!/usr/bin/env node
要么
#!/usr/bin/env nodejs
我宁愿让这个脚本作为任一环境的可执行文件运行,只要安装了这个节点,而不是让其中一个或另一个必须指定命令( ./script-name.js
与node script-name.js
)。
有没有办法指定一个备份hashbang或在node.js兼容的情况?
如果您的脚本是供Node开发人员使用的,那么您绝对应该使用它
#!/usr/bin/env node
并且不打算与仅安装了nodejs
Node的人兼容。
理由:
- 这是很酷的孩子正在做什么,如果你不这样做,你不是很酷。 像jshint , karma , bower ,甚至npm这样的主要节点项目只是使用
#!/usr/bin/env node
作为可执行脚本的文件。 - 因为很酷的孩子正在这样做,所以任何在Ubuntu上使用Node的人都会将
/usr/bin/node
为nodejs
的符号链接。 有堆栈溢出,并在networking上的所有这些高度查看说明 。 甚至还有一个nodejs-legacy
包,其目的是为你创build这个符号链接。 使用Node的人知道如何在Ubuntu上解决这个问题,他们必须要使用几乎所有在Node中编写的软件。 - 这个问题在Ubuntu 14.04上似乎还不存在。 我只是清除节点,并运行
apt-get install nodejs
,并创build了/usr/bin/node
作为/etc/alternatives/node
的符号链接。 受这个问题困扰的人,我怀疑是less数人。
即使你的目标是针对无节制的人,你仍然可能想要使用#!/usr/bin/env node
,如果你愿意的话,可能需要手动创build符号链接或者安装nodejs-legacy
包到你的安装文档认为有必要。 请注意,如果有人使用nodejs
而不是可用node
尝试用上面的shebang运行你的程序,他们会看到:
/ usr / bin / env:node:没有这样的文件或目录
和谷歌search,将给他们的第一个结果,并在第一页多次修复。
如果真的要拼命地确保用户可以在nodejs
可用但node
不可用(或node
实际上是业余无线电节点程序 )的系统上运行软件,那么可以使用这个“two-line shebang“取自Unix&Linux Stack Exchange :
#!/bin/sh ':' //; exec "$(command -v nodejs || command -v node)" "$0" "$@" console.log('Hello world!');
但是当Node几乎没有其他人在使用时,你真的需要这么做么?