web-dev-qa-db-ja.com

Node.jsスクリプトに適切なハッシュバン

複数の環境で動作する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またはどちらの場合でも互換性のあるものを指定する方法はありますか?

63
Explosion Pills

スクリプトがNode開発者による使用を目的としている場合、絶対に使用する必要があります

#!/usr/bin/env node

Nodeのみをnodejsとしてインストールしているユーザーとの互換性を追求することはありません。

根拠:

  • それはクールな子供たちがやっていることであり、あなたもそれをしなければ、あなたはクールではありません。 jshintkarmabower 、さらには npm などのメジャーノードプロジェクトは、単に#!/usr/bin/env nodeを使用します実行可能スクリプトのシバン。
  • クールな子供たちがやっているので、UbuntuでNodeを扱う人は誰でもnodejsへのシンボリックリンクとして/usr/bin/nodeを設定しています。ここでStack Overflowを使用してこれを行うと、Web全体で 高度に表示された指示 があります。このシンボリックリンクを作成することが全体の目的であるnodejs-legacyパッケージもありました。 Nodeを使用する人は、Ubuntuでこの問題を修正する方法を知っています。ほとんどのソフトウェアを使用する場合は、to Nodeで書かれた。
  • この問題はUbuntu 14.04にはもう存在しないようです。 Nodeを削除してapt-get install nodejsを実行し、/usr/bin/nodeへのシンボリックリンクとして/etc/alternatives/nodeを作成しました。この問題に苦しんでいる人々は、少数派になっていると思われます。

Node-literatureのない人をターゲットにしている場合でも、#!/usr/bin/env nodeを使用したい場合があります。おそらく、手動でsymlinkを作成したり、nodejs-legacyパッケージのインストールの必要性をインストールドキュメントに追加したりします必要。 nodejsを使用できるがnodeを使用できないユーザーが上記のShebangを使用してプログラムを実行しようとすると、次のように表示されることに注意してください。

/ usr/bin/env:node:そのようなファイルまたはディレクトリはありません

Googling that は、最初の結果で修正を行い、最初のページで何度も修正します。

本当に、必然的に、ユーザーがnodejsは使用できるがnodeは使用できない(またはnodeが実際にあるシステムでソフトウェアを実行できることを確認したい場合- Amateur Packet Radio Node program )、 nix&Linux Stack Exchange から取得したこの「2行シバン」を使用できます。

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

console.log('Hello world!');

しかし、Nodeの世界に誰もほとんどいないときに本当にこれを行う必要がありますか?

97
Mark Amery