Jeśli twój skrypt jest przeznaczony do użytku przez programistów Node, powinieneś po prostu użyć
#!/usr/bin/env node
i nie przejmuj się próbami zgodności z ludźmi, którzy mają zainstalowany tylko Node jako nodejs
.
Racjonalne uzasadnienie:
- To właśnie robią fajne dzieciaki, a jeśli ty też tego nie robisz, nie jesteś fajny. Główne projekty węzłów, takie jak jshint , karma , bower , a nawet npm, po prostu używają
#!/usr/bin/env node
jako shebang dla swoich wykonywalnych skryptów.
- Ponieważ robią to fajne dzieciaki, każdy, kto pracuje z Node w systemie Ubuntu, skonfigurował
/usr/bin/node
jako łącze symboliczne do nodejs
. Są wysoko obiekty instrukcje robić to tutaj na przepełnienie stosu i całej sieci. Był nawet nodejs-legacy
pakiet, którego celem było stworzenie dla Ciebie tego dowiązania symbolicznego. Ludzie, którzy używają Node, wiedzą, jak rozwiązać ten problem w Ubuntu i muszą to zrobić, jeśli chcą używać prawie każdego oprogramowania kiedykolwiek napisanego w Node.
- Wydaje się, że problem już nie istnieje w systemie Ubuntu 14.04; Właśnie wyczyściłem Node, uruchomiłem
apt-get install nodejs
i utworzyłem /usr/bin/node
jako dowiązanie symboliczne do /etc/alternatives/node
. Podejrzewam, że ludzie dotknięci tą kwestią stanowią malejącą mniejszość.
Nawet jeśli celujesz w analfabetów Node, możesz nadal chcieć używać #!/usr/bin/env node
, być może dodając ewentualną potrzebę ręcznego tworzenia dowiązań symbolicznych lub instalacji nodejs-legacy
pakietu do dokumentacji instalacji, jeśli uznasz to za konieczne. Zwróć uwagę, że jeśli ktoś, kto nodejs
jest node
niedostępny, ale nie jest dostępny, spróbuje uruchomić program za pomocą powyższego shebang, zobaczy:
/ usr / bin / env: node: Nie ma takiego pliku lub katalogu
i googlowanie, które da im poprawkę w pierwszym wyniku i wiele razy na pierwszej stronie.
Jeśli naprawdę, desperacko chcesz się upewnić, że użytkownik może uruchomić twoje oprogramowanie w systemie, w którym nodejs
jest ono dostępne, ale node
nie jest (lub gdzie node
jest w rzeczywistości program Amateur Packet Radio Node ), możesz użyć tego "dwuwierszowego shebang" wziętego z Unix i Linux Stack Exchange :
#!/bin/sh
':' //; exec "$(command -v nodejs || command -v node)" "$0" "$@"
console.log('Hello world!');
ale czy naprawdę musisz to robić, gdy prawie nikt inny w świecie węzłów nie jest?