2013-12-17 10 views
37

私は複数の環境で動作するnode.js用のスクリプトを作成しようとしています。特に私にとっては、OS XとUbuntuの間を行き来しています。前者では、Nodeはnodeとしてインストールされますが、後者ではnodejsです。私のスクリプトの上部には、私が持つことができます。Node.jsスクリプトに適切なhashbang

#!/usr/bin/env node 

または

#!/usr/bin/env nodejs 

を私はむしろスクリプトは限りノードがインストールされているのいずれかとして、環境のための実行可能ファイルとして実行していなく、1を持っていると思いますもう1つはコマンド(./script-name.jsnode script-name.js)を指定する必要があります。

バックアップhashbangを指定する方法はありますか、どちらの場合もnode.jsと互換性がありますか?

+0

スクリプトを呼び出すためのラッパーシェルスクリプトを作成し、ノードの存続場所とその呼び出し先を調べることができます。 – Doon

+3

Unixのサイトでこの答えにたくさんの提案 - http://unix.stackexchange.com/questions/65235/universal-node-js-shebang – sargant

+0

私は '#!/ usr/binから変更したnodejsスクリプトを持っています/ node'を '#!/ usr/bin/nodejs'に変更して、Ubuntu 12.04から12.10にアップグレードしました。そして、両方をチェックするラッパーから呼び出されます。 '#!/ usr/bin/env'ハックの議論については、[この質問](http://unix.stackexchange.com/q/29608/10454)と[私の答え](http:// unix。 stackexchange.com/questions/29608/why-is-it-better-to-use-usr-bin-env-name-instead-of-path-to-name-as-my/29620#29620)。 –

答えて

63

あなたのスクリプトがノードの開発者によって使用することを意図されている場合は、絶対にちょうど

#!/usr/bin/env node 

だけでなく、ノードがnodejsとしてインストールしている人たちとの互換性のためにしようと気を使う必要があります。

理由:

  • それはクールな子供たちがやっていることだし、あなたもそれをしないならば、あなたはクールじゃありません。 jshintkarmabower、さらにはnpmのようなメジャーノードプロジェクトは、実行可能スクリプトのシバンとして単純に#!/usr/bin/env nodeを使用します。
  • クールな子供たちがやっているので、Ubuntuのノードで働いている人は、nodejsへのシンボリックリンクとして/usr/bin/nodeを設定しています。スタックオーバーフローでこれを行うには、highly-viewed instructionsがあります。​​パッケージもあり、このシンボリックリンクを作成することを目的としていました。 Nodeを使っている人はUbuntuでこの問題を解決する方法を知っていて、にはにする必要があります。
  • この問題は、Ubuntu 14.04ではもう存在しないようです。私はNodeをパージしてapt-get install nodejsを実行し、/etc/alternatives/nodeへのシンボリックリンクとして/usr/bin/nodeを作成しました。この問題に苦しんでいる人々は、私は、少数が縮小していると考えています。あなたはノード文盲の人々をターゲットにしている場合であっても

は、あなたはまだあなたはそれが必要と認める場合は、おそらくあなたのインストールマニュアルを手動でシンボリックリンクの作成または​​パッケージのインストールのための可能な必要性を追加し、#!/usr/bin/env nodeを使用することもできます。 nodejsと誰かが、上記シェバングを使用してプログラムを実行しないnode利用できるしようとすると、彼らが表示されますことに注意してください:

は/ usr/binに/ ENV:ノード:そのようなファイルやディレクトリは

Googling thatは、最初の結果に修正を加え、最初のページに何度も修正を加えます。

あなたは本当に、必死ユーザーはnodejsが利用可能ですが、nodeではない(またはnodeが実際にAmateur Packet Radio Node programです)システム上でソフトウェアを実行できることを確認する場合は、この「2行を使用することができますシェバングは」Unix & Linux Stack Exchangeから撮影:

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

console.log('Hello world!'); 

しかし、あなたは本当にノードの世界では、他のほとんど誰もしないときにこれを実行する必要がありますか?

+1

'nodejs'実行可能ファイルのサポートが望ましい場合は、'#!/ bin/sh'と '/ bin/false || 'でシバンを使用する方が少し面白いでしょう。 exec "$(コマンド-v nodejs ||コマンド-vノード)" "$ 0" ' – lennartcl

関連する問題