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

#!/usr/bin/env node

#!/usr/bin/env nodejs

I'd rather have the script run as an executable f或 either environment as long as node is installed rather than have one 或 the other have to specify the command (./script-name.js vs. node script-name.js).

Is there any way to specify a backup hashbang 或 one that is compatible in either case f或 node.js?

推荐答案

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

#!/usr/bin/env node

而且不必费心try 与那些只安装了nodejs个 node 的人兼容.

理论基础:

  • 如果你不酷,子元素们做什么.像jshintkarmabower甚至npm这样的主要 node 项目只是使用#!/usr/bin/env node作为可执行脚本的shebang.
  • 因为酷炫的子元素们正在这么做,任何在Ubuntu上使用Node的人都会将/usr/bin/node设置为nodejs的符号链接.在堆栈溢出和整个web上都有highly-viewed instructions个这样做的例子.甚至还有nodejs-legacy软件包,其全部目的是为您创建这个符号链接.使用Node的人知道如何在Ubuntu上解决这个问题,如果他们想使用Node上编写的几乎所有软件,他们都知道.
  • 在Ubuntu 14.04上,这个问题似乎已经不存在了;我刚刚清除了 node ,运行了一个apt-get install nodejs,它创建了/usr/bin/node作为/etc/alternatives/node的符号链接.我怀疑,受这个问题困扰的人是越来越少的少数群体.

即使你的目标是不懂 node 的人,你可能仍然想使用#!/usr/bin/env node,如果你认为有必要的话,可能还需要手动创建符号链接或在安装文档中安装nodejs-legacy软件包.请注意,如果有人使用nodejs但没有node可用,试图使用上述shebang运行您的程序,他们将看到:

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

Googling that将在第一个结果中给出修复,并在第一页上多次给出修复.

如果你真的非常想确保用户可以在nodejs可用但node不可用(或者node实际上是Amateur Packet Radio Node program)的系统上运行你的软件,那么你可以使用Unix & Linux Stack Exchange中的"两行shebang":

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

console.log('Hello world!');

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

Node.js相关问答推荐

使用NodeJS在S3上传文件时的格式问题

mongoose 模型填充问题

尽管 tsconfig 中提供了正确的路径,但仍出现找不到模块错误

我正在try 在公共目录中使用 Express.js 项目部署 Angular 静态构建

为什么 $or 在带有正则表达式的mongoose 中不能正常工作

当我try 从本地主机发布新产品时收到错误消息

fastify:流过早关闭

是Electron 的密码和登录凭据的安全存储吗?

使用 Node.js 在 MongoDB 中搜索

在 `DataFrame` 上使用用户定义的可链接函数抽象出 Polars 表达式

postman 发送请求……永远

使用加密模块的流功能获取文件的哈希(即:没有 hash.update 和 hash.digest)

Node.js mongodb 驱动程序异步/等待查询

Aptana Studio 是否有 NodeJS 插件?

在 Node.js 与 Cron 作业(job)中设置间隔?

Node.js 支持 =>(箭头函数)

我可以在 Heroku 中运行咖啡脚本吗?

在单独的模块中定义 Mongoose 模型

我应该如何在 webpack 中使用时刻时区?

如何在 node.js 沙箱中安全地运行用户提交的脚本?