Подтвердить что ты не робот

Соответствующий hashbang для node.js скриптов

Я пытаюсь создать script для node.js, который будет работать в нескольких средах. В частности, для меня я переключаюсь между OS X и Ubuntu. В первом случае Node устанавливается как node, а во втором - nodejs. В верхней части моего script я могу:

#!/usr/bin/env node

или

#!/usr/bin/env nodejs

Я предпочел бы, чтобы script выполнялся как исполняемый файл для любого из них, если установлен Node, а не один или другой, чтобы указать команду (./script-name.js vs. node script-name.js).

Можно ли указать хэш файл резервной копии или тот, который совместим в любом случае для node.js?

4b9b3361

Ответ 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?