适用于Node.js脚本的hashbang

如何解决适用于Node.js脚本的hashbang

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

#!/usr/bin/env node

不必试图与只安装Node的用户兼容nodejs

理由:

  • 这就是很酷的孩子们正在做的事情,如果您也不这样做,那么您就不会很酷。主要节点项目,如jshint因果报应凉亭,甚至NPM简单地使用#!/usr/bin/env node作为家当他们可执行的脚本。
  • 由于很酷的孩子正在这样做,因此在Ubuntu上使用Node的任何人都将设置/usr/bin/node为的符号链接nodejs。有高度看说明书上堆栈溢出这里这样做,并在网上所有。甚至有一个nodejs-legacy软件包的全部目的是为您创建此符号链接。使用Node的人知道如何在Ubuntu上解决此问题,如果他们想使用几乎用Node编写的任何软件,就 必须这样做
  • 这个问题似乎在Ubuntu 14.04上似乎不再存在。我只是清除Node并运行一个,apt-get install nodejs并将其创建/usr/bin/node为的符号链接/etc/alternatives/node。我怀疑受此问题困扰的人正在减少。

即使您是针对不懂Node的人的,也可能仍要使用#!/usr/bin/env nodenodejs- legacy如果您认为有必要,可能会在安装文档中添加手动创建符号链接或安装软件包的可能。请注意,如果有其他人nodejs但不可node用的人尝试使用上述shebang运行您的程序,他们将看到:

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

谷歌搜索,这将使他们在第一结果中获得修复,并在第一页上获得多次修复。

如果您真正地急切地希望确保用户可以在nodejs可用但node不可用的系统上(或node实际上在“业余分组无线节点”程序所在的系统)上运行您的软件,那么您可以使用此“两行shebang”来自Unix和LinuxStackExchange

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

console.log('Hello world!');

但是当Node世界中几乎没有其他人时,您真的需要这样做吗?

解决方法

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

#!/usr/bin/env node

要么

#!/usr/bin/env nodejs

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

有什么方法可以指定备份hashbang或与node.js兼容的备份哈希吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?