我正在尝试为 node.js 创建一个可以在多种环境中运行的脚本。特别是对我来说,我经常在 OS X 和 Ubuntu 之间来回切换。在前者中,Node 安装为node
,但在后者中是nodejs
。在我的脚本的顶部,我可以有:
#!/usr/bin/env node
or
#!/usr/bin/env nodejs
我宁愿让脚本作为任一环境的可执行文件运行,只要安装了节点,而不是让一个或另一个必须指定命令(./script-name.js
vs. node script-name.js
).
有什么方法可以指定备份 hashbang 或在任一情况下与 Node.js 兼容的 hashbang 吗?
如果您的脚本供 Node 开发人员使用,那么您绝对应该使用
#!/usr/bin/env node
并且不必费心尝试与仅安装 Node 的人兼容nodejs
.
理由:
- 这是很酷的孩子们都会做的事,如果你不这样做,那你就不酷。主要节点项目如jshint https://github.com/jshint/jshint/blob/master/bin/jshint, karma https://github.com/karma-runner/karma/blob/master/bin/karma, bower https://github.com/bower/bower/blob/master/bin/bower, 乃至npm https://github.com/npm/npm/blob/master/bin/npm-cli.js只需使用
#!/usr/bin/env node
作为其可执行脚本的 shebang。
- 因为酷孩子们都在这样做,所以任何在 Ubuntu 上使用 Node 的人都建立了一个
/usr/bin/node
作为符号链接nodejs
。有备受关注的说明 https://stackoverflow.com/questions/18130164/nodejs-vs-node-on-ubuntu-12-04在 Stack Overflow 上以及整个网络上执行此操作。甚至还有nodejs-legacy
包的全部目的是为您创建此符号链接。使用 Node 的人知道如何在 Ubuntu 上解决这个问题,并且他们have to如果他们想使用几乎任何用 Node 编写的软件。
- 在 Ubuntu 14.04 上这个问题似乎不再存在;我刚刚清除了 Node 并运行了
apt-get install nodejs
它创造了/usr/bin/node
作为符号链接/etc/alternatives/node
。我怀疑,受这个问题困扰的人只是少数。
即使您的目标人群是不懂 Node 的人,您可能仍然想使用#!/usr/bin/env node
,也许添加了手动符号链接创建或安装的可能需要nodejs-legacy
如果您认为有必要,请将其打包到您的安装文档中。请注意,如果有人nodejs
但不是node
available 尝试使用上面的 shebang 运行您的程序,他们会看到:
/usr/bin/env: 节点:没有这样的文件或目录
and 谷歌搜索那个 https://www.google.co.uk/search?q=%22%2Fusr%2Fbin%2Fenv%3A%20node%3A%20No%20such%20file%20or%20directory%22将在第一个结果中为他们提供修复,并在第一页上多次修复。
如果您确实迫切希望确保用户可以在以下系统上运行您的软件:nodejs
可用但是node
不是(或在哪里node
实际上是业余分组无线电节点计划 http://packages.ubuntu.com/lucid/node),那么你可以使用这个“两行shebang”取自Unix 和 Linux 堆栈交换 https://unix.stackexchange.com/a/65295/29001:
#!/bin/sh
':' //; exec "$(command -v nodejs || command -v node)" "$0" "$@"
console.log('Hello world!');
但是,当 Node 世界中几乎没有其他人这样做时,您真的需要这样做吗?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)