J’essaie de créer un script pour node.js qui fonctionnera dans plusieurs environnements. Surtout pour moi, je passe de OS X à Ubuntu. Dans le premier, Node est installé en tant que node
, mais dans le dernier cas, il s’agit de nodejs
. En haut de mon script, je peux avoir:
#!/usr/bin/env node
ou
#!/usr/bin/env nodejs
Je préférerais que le script soit exécuté en tant qu’exécutable pour l’un ou l’autre environnement tant que le noeud est installé plutôt que si l’un ou l’autre doit spécifier la commande ( ./script-name.js
vs. node script-name.js
).
Est-il possible de spécifier un hashbang de sauvegarde ou un hashbang compatible dans les deux cas pour node.js?
Si votre script est destiné à être utilisé par les développeurs Node, vous devez absolument utiliser
#!/usr/bin/env node
et pas la peine d’essayer de compatibilité avec des personnes qui ont seulement Node installé en tant que nodejs
.
Raisonnement:
#!/usr/bin/env node
comme shebang pour leurs scripts exécutables. /usr/bin/node
comme lien symbolique vers nodejs
. Il y a des instructions très visibles sur le faire ici sur Stack Overflow, et sur tout le Web. Il y avait même le package nodejs-legacy
dont le but était de créer ce lien symbolique pour vous. Les personnes qui utilisent Node savent comment résoudre ce problème sur Ubuntu, et elles doivent le faire si elles veulent utiliser à peu près tous les logiciels écrits en Node. apt-get install nodejs
qui a créé /usr/bin/node
tant que lien symbolique vers /etc/alternatives/node
. Je soupçonne que les personnes touchées par ce problème sont en minorité. Même si vous ciblez des personnes illettrées, vous pouvez toujours utiliser le #!/usr/bin/env node
, en ajoutant peut-être le besoin éventuel de création manuelle de lien symbolique ou d’installation du paquet nodejs-legacy
dans votre documentation d’installation. juge nécessaire. Notez que si quelqu’un avec nodejs
mais pas de node
disponible essaie d’exécuter votre programme avec le shebang ci-dessus, il verra:
/ usr / bin / env: node: Pas de tel fichier ou répertoire
et Google qui leur donnera le correctif dans le premier résultat et plusieurs fois sur la première page.
Si vous voulez vraiment vous assurer que l’utilisateur peut exécuter votre logiciel sur un système sur lequel nodejs
est disponible mais que node
n’est pas (ou où le node
est en fait le programme Amateur Packet Radio Node ), alors vous pouvez utiliser cette shebang “extrait de Unix & Linux Stack Exchange :
#!/bin/sh ':' //; exec "$(command -v nodejs || command -v node)" "$0" "$@" console.log('Hello world!');
mais avez-vous vraiment besoin de faire cela quand presque personne d’autre dans le monde Node n’est?