J'essaie de créer un script pour node.js qui fonctionnera dans plusieurs environnements. En particulier pour moi, je bascule entre OS X et Ubuntu. Dans le premier, Node est installé en tant que node
, mais dans le second, c'est nodejs
. En haut de mon script, je peux avoir:
#!/usr/bin/env node
ou
#!/usr/bin/env nodejs
Je préfère que le script soit exécuté en tant qu'exécutable pour l'un ou l'autre environnement tant que le nœud est installé plutôt que l'un ou l'autre doit spécifier la commande (./script-name.js
contre. node script-name.js
).
Existe-t-il un moyen de spécifier un hashbang de sauvegarde ou un qui est 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 ne vous embêtez pas à essayer de compatibilité avec des gens qui ont seulement Node installé en tant que nodejs
.
Raisonnement:
#!/usr/bin/env node
comme Shebang pour leurs scripts exécutables./usr/bin/node
en tant que lien symbolique vers nodejs
. Il y a instructions très consultées sur cette opération ici sur Stack Overflow, et partout sur le Web. Il y avait même le nodejs-legacy
package dont le but était de créer ce lien symbolique pour vous. Les gens qui utilisent Node savent comment résoudre ce problème sur Ubuntu, et ils doivent s'ils veulent utiliser pretty la plupart des logiciels jamais écrits dans Node.apt-get install nodejs
et il a créé /usr/bin/node
en tant que lien symbolique vers /etc/alternatives/node
. Les personnes touchées par ce problème sont, je suppose, une minorité qui diminue.Même si vous ciblez des personnes analphabètes Node, vous pouvez toujours utiliser #!/usr/bin/env node
, ajoutant peut-être le besoin éventuel de créer ou d'installer manuellement un lien symbolique nodejs-legacy
package à votre documentation d'installation si vous le jugez nécessaire. Notez que si quelqu'un avec nodejs
mais pas node
disponible essaie d'exécuter votre programme avec le Shebang ci-dessus, il verra:
/ usr/bin/env: node: aucun fichier ou répertoire de ce type
et Googler ça leur donnera le correctif dans le premier résultat et plusieurs fois sur la première page.
Si vous voulez vraiment et désespérément vous assurer que l'utilisateur peut exécuter votre logiciel sur un système où nodejs
est disponible mais node
ne l'est pas (ou où node
est en fait le - Amateur Packet Radio Node program ), alors vous pouvez utiliser ce "Shebang à deux lignes" tiré de nix & 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?