Se o seu script se destina ao uso por desenvolvedores do Node, você deve simplesmente usar
#!/usr/bin/env node
e não se preocupe em tentar a compatibilidade com pessoas que têm apenas o Node instalado como nodejs
.
Justificativa:
- É o que as crianças legais estão fazendo, e se você não fizer isso também, você não será legal. Projetos de node principais como jshint , karma , bower e até mesmo npm simplesmente são usados
#!/usr/bin/env node
como o shebang para seus scripts executáveis.
- Porque as crianças legais estão fazendo isso, qualquer pessoa que trabalhe com o Node no Ubuntu configurou um
/usr/bin/node
como um link simbólico para nodejs
. Existem instruções muito vistas sobre como fazer isso aqui no Stack Overflow e em toda a web. Existia até o nodejs-legacy
pacote cujo propósito era criar este link simbólico para você. As pessoas que usam o Node sabem como consertar esse problema no Ubuntu e precisam fazê-lo se quiserem usar praticamente qualquer software já escrito em Node.
- O problema nem parece mais existir no Ubuntu 14.04; Limpei o Node e executei um
apt-get install nodejs
e ele foi criado /usr/bin/node
como um link simbólico para /etc/alternatives/node
. As pessoas afetadas por esse problema são, eu suspeito, uma minoria cada vez menor.
Mesmo que você tenha como alvo pessoas analfabetas do Node, você ainda pode querer usar #!/usr/bin/env node
, talvez adicionando a possível necessidade de criação de link simbólico manual ou instalação do nodejs-legacy
pacote à sua documentação de instalação se você julgar necessário. Observe que se alguém com, nodejs
mas não node
disponível, tentar executar seu programa com o esquema acima, verá:
/ usr / bin / env: node: Não existe esse arquivo ou diretório
e Googling que lhes dará a correção no primeiro resultado e muitas vezes na primeira página.
Se você realmente deseja desesperadamente ter certeza de que o usuário pode executar seu software em um sistema onde nodejs
está disponível, mas node
não está (ou onde node
está realmente o programa Amateur Packet Radio Node ), então você pode usar este "shebang de duas linhas" do Unix e Linux Stack Exchange :
#!/bin/sh
':' //; exec "$(command -v nodejs || command -v node)" "$0" "$@"
console.log('Hello world!');
mas você realmente precisa fazer isso quando quase ninguém mais no mundo Node precisa?