Если ваш скрипт предназначен для разработчиков Node, вы должны просто использовать
#!/usr/bin/env node
и не пытайтесь обеспечить совместимость с людьми, у которых Node установлен только как nodejs
.
Обоснование:
- Это то, что делают крутые ребята, и если вы тоже этого не делаете, вы не крутые. Основные узловые проекты , такие как jshint , карма , дача , и даже НПЙ просто использовать
#!/usr/bin/env node
как притон для своих исполняемых скриптов.
- Поскольку крутые ребята это делают, любой, кто работает с Node в Ubuntu, создал
/usr/bin/node
символическую ссылку на nodejs
. Здесь, в Stack Overflow, и во всем Интернете есть хорошо изученные инструкции по выполнению этого. Был даже nodejs-legacy
пакет, вся цель которого заключалась в создании для вас этой символической ссылки. Люди, которые используют Node, знают, как решить эту проблему в Ubuntu, и они должны это сделать, если они хотят использовать практически любое программное обеспечение, когда-либо написанное на Node.
- Проблема, похоже, больше не существует в Ubuntu 14.04; Я просто очистил Node и запустил,
apt-get install nodejs
и он был создан /usr/bin/node
как символическая ссылка на /etc/alternatives/node
. Я подозреваю, что людей, страдающих от этой проблемы, становится все меньше и меньше.
Даже если вы нацелены на неграмотных пользователей Node, вы все равно можете захотеть использовать #!/usr/bin/env node
, возможно, добавив возможную необходимость создания символических ссылок вручную или установки nodejs-legacy
пакета в вашу документацию по установке, если вы сочтете это необходимым. Обратите внимание, что если кто-то, у кого есть доступ, nodejs
но node
недоступен, попытается запустить вашу программу с указанным выше шебангом, он увидит:
/ usr / bin / env: node: нет такого файла или каталога
и поиск в Google, который даст им исправление в первом результате и много раз на первой странице.
Если вы действительно, отчаянно хотите убедиться, что пользователь может запускать ваше программное обеспечение в системе, где nodejs
оно доступно, но node
не доступно (или где node
на самом деле находится программа узла любительского пакетного радио ), то вы можете использовать этот "двухстрочный шебанг", взятый из Unix и Linux Stack Exchange :
#!/bin/sh
':' //; exec "$(command -v nodejs || command -v node)" "$0" "$@"
console.log('Hello world!');
но действительно ли вам нужно это делать, когда почти никого в мире узлов нет?