Geeignet für hashbang Node.js Skripte
Ich versuche ein script zu erstellen für node.js das wird die Arbeit in verschiedenen Umgebungen. Besonders für mich, ich bin hin-und her wechseln zwischen OS X und Ubuntu. In der ehemaligen, Knoten installiert ist, wie node
, aber in der letzteren ist es nodejs
. An der Spitze von meinem script, die ich haben kann:
#!/usr/bin/env node
oder
#!/usr/bin/env nodejs
Habe ich lieber das Skript als ausführbare Datei für jede Umgebung solange die Knoten installiert haben, anstatt eine oder das andere haben, um den Befehl anzugeben, der (./script-name.js
vs. node script-name.js
).
Gibt es eine Möglichkeit, geben Sie eine Sicherungs-hashbang oder eine, die kompatibel ist in jedem Fall für node.js?
- Sie könnte eine wrapper-shell-Skript aufrufen, das Skript, das versucht, herauszufinden, wo node Leben und was es heißt.
- Viele Anregungen in dieser Antwort auf die Unix-site - unix.stackexchange.com/questions/65235/...
- Ich habe einen nodejs-Skript, das ich geändert
#!/usr/bin/node
zu#!/usr/bin/nodejs
wenn ich ein Upgrade von Ubuntu 12.04 auf 12.10. Und es ist aufgerufen, aus einem wrapper, der prüft, für beide. Für die Diskussion der#!/usr/bin/env
hack finden Sie unter diese Frage und meine Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Ihr Skript ist für den Einsatz von Knoten-Entwickler, sollten Sie unbedingt nur verwenden
und nicht die Mühe, für die Kompatibilität mit Menschen, die nur Knoten installiert
nodejs
.Begründung:
#!/usr/bin/env node
als der Kram für die ausführbaren Skripte./usr/bin/node
als ein symlink zunodejs
. Es gibt hoch angesehen Anweisungen auf diese Weise hier auf Stack Overflow, und alle über das Internet. Es war sogar dasnodejs-legacy
Paket, dessen ganzes Ziel war die Schaffung dieser symlink für Sie. Menschen, die Knoten wissen, wie dieses problem zu lösen, die auf Ubuntu, und Sie müssen wenn Sie wollen, zu verwenden, so ziemlich jede software, die jemals geschrieben Knoten.apt-get install nodejs
und es erstellt/usr/bin/node
als ein symlink zu/etc/alternatives/node
. Menschen bedrängt, die von diesem Problem sind, vermute ich, eine schrumpfende Minderheit.Selbst wenn Sie targeting-Knoten-Analphabeten, können Sie immer noch verwenden möchten
#!/usr/bin/env node
vielleicht hinzufügen, die mögliche Notwendigkeit für die manuelle symlink-Erstellung oder installation dernodejs-legacy
- Paket für Ihre installation-Dokumentation, wenn Sie es für notwendig erachten. Beachten Sie, dass, wenn jemand mitnodejs
aber nichtnode
zur Verfügung versucht, führen Sie Ihr Programm mit den oben genannten shebang, Sie werden sehen:und Googeln, dass wird Ihnen das Update in der ersten Folge und viele Male auf der ersten Seite.
Wenn Sie wirklich, wollen unbedingt sicherstellen, dass die Anwender können Ihre software auf einem system, wo
nodejs
verfügbar ist, abernode
ist nicht (oder wonode
ist eigentlich die Amateur Packet Radio Node Programm), dann können Sie diese "zwei-line-Kram" aus der Unix & Linux Stack Exchange:aber wissen Sie wirklich brauchen, um dies zu tun, wenn fast niemand sonst in der Knoten-Welt ist?
nodejs
ausführbare Datei bevorzugt wird, kann es etwas schönere Verwendung einer UMMANTELUNG mit#!/bin/sh
und//bin/false || exec "$(command -v nodejs || command -v node)" "$0"
.--experimental-modules
wenn Sie mit dieserenv
shebang-Zeile. Gibt es hacks um, aber Sie sind häßlich.