Estoy tratando de crear un script para node.js que funcione en múltiples entornos. Particularmente para mí, estoy cambiando entre OS X y Ubuntu. En el primero, Node se instala como node, pero en el segundo lo es nodejs. En la parte superior de mi guión, puedo tener:
#!/usr/bin/env node
o
#!/usr/bin/env nodejs
Prefiero que el script se ejecute como un ejecutable para cualquier entorno siempre que el nodo esté instalado en lugar de que uno u otro tenga que especificar el comando ( ./script-name.jsvs. node script-name.js).
¿Hay alguna forma de especificar un hashbang de respaldo o uno que sea compatible en cualquier caso para node.js?

#!/usr/bin/nodeque#!/usr/bin/nodejscuando he actualizado desde Ubuntu 12.04 a 12.10. Y se invoca desde un contenedor que comprueba ambos. Para una discusión sobre el#!/usr/bin/envtruco, vea esta pregunta y mi respuesta .Respuestas:
Si su script está diseñado para que lo utilicen desarrolladores de Node, debe usar
#!/usr/bin/env nodey no se moleste en probar la compatibilidad con personas que solo tienen Node instalado como
nodejs.Razón fundamental:
#!/usr/bin/env nodecomo el tinglado por sus secuencias de comandos ejecutables./usr/bin/nodeun enlace simbólico anodejs. Hay instrucciones muy consultadas sobre cómo hacer esto aquí en Stack Overflow y en toda la web. Incluso estaba elnodejs-legacypaquete cuyo único propósito era crear este enlace simbólico para usted. Las personas que usan Node saben cómo solucionar este problema en Ubuntu, y deben hacerlo si quieren usar prácticamente cualquier software escrito en Node.apt-get install nodejsy se creó/usr/bin/nodecomo un enlace simbólico a/etc/alternatives/node. Sospecho que las personas afectadas por este problema son una minoría cada vez menor.Incluso si está apuntando a personas analfabetas de Node, es posible que aún desee usar
#!/usr/bin/env node, quizás agregando la posible necesidad de creación manual de enlaces simbólicos o instalación delnodejs-legacypaquete a su documentación de instalación si lo considera necesario. Tenga en cuenta que si alguien connodejspero nonodedisponible intenta ejecutar su programa con el shebang anterior, verá:y buscar en Google que les dará la solución en el primer resultado y muchas veces en la primera página.
Si realmente y desesperadamente desea asegurarse de que el usuario pueda ejecutar su software en un sistema donde
nodejsestá disponible peronodeno lo está (o dóndenodeestá realmente el programa Nodo de radio de paquetes amateur ), entonces puede usar este "shebang de dos líneas" tomado de Unix y Linux Stack Exchange :#!/bin/sh ':' //; exec "$(command -v nodejs || command -v node)" "$0" "$@" console.log('Hello world!');pero, ¿realmente necesitas hacer esto cuando casi nadie más en el mundo Node lo hace?
fuente
nodejsse prefiere la compatibilidad con el ejecutable, es posible que le resulte un poco más bonito usar un shebang con#!/bin/shy//bin/false || exec "$(command -v nodejs || command -v node)" "$0".--experimental-modules, si usa estaenvlínea shebang. Hay trucos por ahí, pero son feos .