Node.js脚本的适当hashbang

时间:2013-12-17 15:45:02

标签: node.js shell shebang

我正在尝试为node.js创建一个可在多个环境中运行的脚本。特别是对我来说,我在OS X和Ubuntu之间来回切换。在前者中,Node安装为node,但后者为nodejs。在我的脚本的顶部,我可以:

#!/usr/bin/env node

#!/usr/bin/env nodejs

只要安装了节点而不是让一个或另一个必须指定命令(./script-name.jsnode script-name.js),我宁愿让脚本作为任一环境的可执行文件运行。

有没有办法在node.js中指定备份hashbang或兼容的?

1 个答案:

答案 0 :(得分:92)

如果您的脚本供Node开发人员使用,那么您绝对应该使用

#!/usr/bin/env node

并且不打算尝试与仅安装了节点为nodejs的人员兼容。

理由:

  • 很酷的孩子正在做什么,如果你也不这样做,你就不会冷静。像jshintkarmabower甚至npm这样的主要节点项目只使用#!/usr/bin/env node作为其可执行脚本的shebang。
  • 因为很酷的孩子正在这样做,所以在Ubuntu上使用Node的人都设置了/usr/bin/node作为nodejs的符号链接。在Stack Overflow和整个网络上都有highly-viewed instructions这样做。甚至还有nodejs-legacy包,其目的是为您创建此符号链接。使用Node的人知道如何在Ubuntu上解决这个问题,如果他们想要使用几乎任何在Node中编写的软件,他们必须
  • 在Ubuntu 14.04上,问题似乎甚至不再存在;我刚刚清除了Node并运行了apt-get install nodejs,并创建了/usr/bin/node作为/etc/alternatives/node的符号链接。我怀疑,受这个问题困扰的人是一个萎缩的少数民族。

即使您定位了Node-illiterate人,您仍可能希望使用#!/usr/bin/env node,或许可能需要手动创建符号链接或将nodejs-legacy包安装到您的安装中如果您认为有必要,请提供文件。请注意,如果有nodejs但没有node的人尝试使用上述程序运行您的程序,他们会看到:

  

/ usr / bin / env:node:没有这样的文件或目录

Googling that会在第一个结果中为他们提供修复,并在第一页上多次提供。

如果您真的想要确保用户可以在nodejs可用但node不可用的系统上运行您的软件(或node实际上是{ {3}}),那么你可以使用这个"双线shebang"摘自Amateur Packet Radio Node program

#!/bin/sh
':' //; exec "$(command -v nodejs || command -v node)" "$0" "$@"

console.log('Hello world!');

但是,当Node节点中几乎没有其他人是你的时候,你真的需要这样做吗?