2013-12-17 20 views
37

Birden çok ortamda çalışacak node.js için bir komut dosyası oluşturmaya çalışıyorum. Özellikle benim için OS X ve Ubuntu arasında gidip geliyorum. Eskide, Node node olarak yüklenir, ancak ikincisindeyse nodejs'dur. Senaryomun üstünde, ben sahip olabilir:Node.js komut dosyaları için uygun sağlama

#!/usr/bin/env node 

veya

#!/usr/bin/env nodejs 
düğüm ziyade yüklü olarak ben daha çok senaryo sürece her iki ortam için bir yürütülebilir olarak çalıştırmak olurdu

birine sahip veya diğeri komutu belirtmek zorundadır (./script-name.js ve node script-name.js).

Node.js için her iki durumda da uyumlu bir yedek sağlama veya herhangi biri için uygun bir yol belirtmenin bir yolu var mı? senaryonuz Düğümü geliştiriciler tarafından kullanılmak üzere tasarlanmıştır ise

+0

Senaryonuzu çağırmak için bir sarmalayıcı kabuk betiği yapabilirsin, bu, düğümün nerede yaşadığını ve neyin çağrıldığını bulmaya çalışır. – Doon

+3

Unix sitesinde bu cevapta çok sayıda öneri - http://unix.stackexchange.com/questions/65235/universal-node-js-shebang – sargant

+0

'#!/Usr/bin'den değiştirdiğim bir nodejs komut dosyası var Ubuntu 12.04'ten 12.10'a yükselttiğimde/node' - '#!/usr/bin/nodejs'. Ve her ikisini de kontrol eden bir paketleyiciden çağrıldı. '#!/Usr/bin/env' hack'inin tartışılması için, [bu soru] 'na (http://unix.stackexchange.com/q/29608/10454) ve [yanıtıma] bakın (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). –

cevap

63

, kesinlikle sadece

#!/usr/bin/env node 

ve sadece Düğüm nodejs olarak yüklemiş olan uyumluluk için çalışırken rahatsız kullanmalıdır.

Gerekçe:

  • O havalı yapıyor ve siz de bunu yapmayın, size havalı değiliz zaten. jshint, karma, bower ve hatta npm gibi büyük düğüm projeleri, çalıştırılabilir komut dosyaları için shebang olarak sadece #!/usr/bin/env node kullanın.
  • Harika çocuklar bunu yaptığından, Ubuntu'da Düğümle çalışan herkes /usr/bin/node'u bir bağlantı noktası olarak nodejs olarak ayarlamıştır. Yığın Taşması'nda ve tüm web'de bunu yapmak için highly-viewed instructions vardır. Tüm amacı sizin için bu sembolik bağlantıyı oluşturmak olan nodejs-legacy paketinin bile vardı. Node kullanan kişiler Ubuntu'da bu sorunu nasıl çözeceklerini biliyorlar ve Node'de yazılan hemen hemen tüm yazılımları kullanmak istiyorlarsa 'a sahipler. Ubuntu 14.04'te problemin artık mevcut olmadığı görülmektedir; Node'u temizledim ve apt-get install nodejs'u çalıştırdım ve /usr/bin/node'u /etc/alternatives/node'a bir bağlantı olarak oluşturdu. Bu sorundan etkilenen insanlar, sanırım küçülen bir azınlık. Düğüm-okuma yazma bilmeyen insanları hedef olsanız bile

, yine de gerekli görülürse, belki kurulum belgelerine el Sembolik bağ oluşturma veya nodejs-legacy paketinin kurulumu için olası ihtiyacı ekleyerek #!/usr/bin/env node kullanmak isteyebilir. nodejs ancak node mevcut denemeden olan biri yukarıdaki shebang ile programı çalıştırmak için, onlar göreceğinizi unutmayın:

/usr/bin/env: düğümü: Böyle bir dosya ya da dizin

ve Googling that, ilk sonuçta ve ilk sayfada birçok kez düzeltme sağlayacaktır.Eğer gerçekten, umutsuzca kullanıcı nodejs mevcuttur, ancak node (veya node aslında Amateur Packet Radio Node program olduğu), o zaman kullanabileceğiniz bu "çift hatlı olmayan bir sistemde sizin yazılımı çalıştırmak emin olmak için

shebang" Unix & Linux Stack Exchange alınan:

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

console.log('Hello world!'); 

ama gerçekten Düğüm dünyada başka neredeyse hiç kimse olduğunda bunu yapmak gerekiyor?

+1

Eğer 'nodejs' yürütülebilir için destek tercih edilirse,' #!/Bin/sh' ve '// bin/false || ile bir shebang kullanmak biraz daha güzel olabilir. exec "$ (komut -v nodejs || komut -v düğümü)" "0 $". – lennartcl

İlgili konular