Ответ 1
Если ваш script предназначен для разработчиков Node, вы должны просто использовать
#!/usr/bin/env node
и не пытайтесь найти совместимость с людьми, у которых только Node установлен как nodejs
.
Обоснование:
- Это то, что делают крутые дети, и если вы этого не сделаете, вы не круты. Основные Node проекты, такие как jshint, karma, bower и даже npm просто используйте
#!/usr/bin/env node
как shebang для своих исполняемых скриптов. - Поскольку классные дети это делают, любой, кто работает с Node на Ubuntu, настроил
/usr/bin/node
как символическую ссылку наnodejs
. Существуют высокооцененные инструкции, которые вы делаете здесь, в Qaru и во всем Интернете. Был даже пакет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
доступен, пытается запустить вашу программу с помощью вышеперечисленного shebang, они будут видеть:
/usr/bin/env: node: нет такого файла или каталога
и Googling, который даст им исправление в первом результате и много раз на первой странице.
Если вы действительно отчаянно хотите убедиться, что пользователь может запустить ваше программное обеспечение в системе, где nodejs
доступен, но node
нет (или где node
на самом деле Программа любительского пакетного радио Node, то вы можете использовать эту "двухстрочную shebang", взятую из Unix и Linux Stack Exchange:
#!/bin/sh
':' //; exec "$(command -v nodejs || command -v node)" "$0" "[email protected]"
console.log('Hello world!');
но действительно ли вам нужно это делать, когда почти никто в мире Node?