我正在尝试为node.js创建一个可在多个环境中运行的脚本。特别是对我来说,我在OS X和Ubuntu之间来回切换。在前者中,Node安装为node
,但后者为nodejs
。在我的脚本的顶部,我可以:
#!/usr/bin/env node
或
#!/usr/bin/env nodejs
只要安装了节点而不是让一个或另一个必须指定命令(./script-name.js
与node script-name.js
),我宁愿让脚本作为任一环境的可执行文件运行。
有没有办法在node.js中指定备份hashbang或兼容的?
答案 0 :(得分:92)
如果您的脚本供Node开发人员使用,那么您绝对应该使用
#!/usr/bin/env node
并且不打算尝试与仅安装了节点为nodejs
的人员兼容。
理由:
#!/usr/bin/env node
作为其可执行脚本的shebang。/usr/bin/node
作为nodejs
的符号链接。在Stack Overflow和整个网络上都有highly-viewed instructions这样做。甚至还有nodejs-legacy
包,其目的是为您创建此符号链接。使用Node的人知道如何在Ubuntu上解决这个问题,如果他们想要使用几乎任何在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节点中几乎没有其他人是你的时候,你真的需要这样做吗?