Ich versuche, ein Skript für node.js zu erstellen, das in mehreren Umgebungen funktioniert. Besonders für mich wechsle ich zwischen OS X und Ubuntu hin und her. Im ersten Fall wird Node als installiert node
, im zweiten Fall jedochnodejs
. Am Anfang meines Skripts kann ich Folgendes haben:
#!/usr/bin/env node
oder
#!/usr/bin/env nodejs
Ich möchte lieber, dass das Skript als ausführbare Datei für eine der beiden Umgebungen ausgeführt wird, solange der Knoten installiert ist, anstatt dass der eine oder andere den Befehl ( ./script-name.js
vs. node script-name.js
) angeben muss .
Gibt es eine Möglichkeit, einen Backup-Hashbang anzugeben oder einen, der in beiden Fällen für node.js kompatibel ist?
#!/usr/bin/node
dem#!/usr/bin/nodejs
ich beim Upgrade von Ubuntu 12.04 auf 12.10 geändert habe . Und es wird von einem Wrapper aufgerufen, der nach beiden sucht. Zur Diskussion des#!/usr/bin/env
Hacks siehe diese Frage und meine Antwort .Antworten:
Wenn Ihr Skript für die Verwendung durch Node-Entwickler vorgesehen ist, sollten Sie es unbedingt nur verwenden
und nicht versuchen, Kompatibilität mit Leuten zu versuchen, die nur Node als installiert haben
nodejs
.Begründung:
#!/usr/bin/env node
als Shebang für ihre ausführbaren Skripte verwendet./usr/bin/node
als Symlink zu eingerichtetnodejs
. Hier auf Stack Overflow und im gesamten Web finden Sie häufig angezeigte Anweisungen dazu . Es gab sogar dasnodejs-legacy
Paket, dessen gesamter Zweck darin bestand, diesen Symlink für Sie zu erstellen. Leute, die Node verwenden, wissen, wie man dieses Problem unter Ubuntu behebt, und sie müssen, wenn sie so ziemlich jede Software verwenden wollen, die jemals in Node geschrieben wurde.apt-get install nodejs
und es wurde/usr/bin/node
als Symlink zu erstellt/etc/alternatives/node
. Ich vermute, die von diesem Problem betroffenen Menschen sind eine schrumpfende Minderheit.Selbst wenn Sie sich an Node-Analphabeten wenden, möchten Sie diese möglicherweise weiterhin verwenden
#!/usr/bin/env node
und möglicherweise die Notwendigkeit einer manuellen Symlink-Erstellung oder Installation desnodejs-legacy
Pakets zu Ihrer Installationsdokumentation hinzufügen, wenn Sie dies für erforderlich halten. Beachten Sie, dass jemand mitnodejs
, der nichtnode
verfügbar ist und versucht, Ihr Programm mit dem oben genannten Shebang auszuführen, Folgendes sieht:und Googeln, das ihnen die Korrektur im ersten Ergebnis und viele Male auf der ersten Seite gibt.
Wenn Sie wirklich unbedingt sicherstellen möchten, dass der Benutzer Ihre Software auf einem System ausführen kann, auf dem
nodejs
verfügbar ist, das jedochnode
nicht verfügbar ist (oder auf demnode
sich tatsächlich das Amateur Packet Radio Node-Programm befindet ), können Sie diesen "zweizeiligen Shebang" verwenden von Unix & Linux Stack Exchange :Aber müssen Sie das wirklich tun, wenn es fast niemand in der Knotenwelt gibt?
quelle
nodejs
ausführbare Datei bevorzugt wird, ist es möglicherweise etwas hübscher, einen Shebang mit#!/bin/sh
und zu verwenden//bin/false || exec "$(command -v nodejs || command -v node)" "$0"
.--experimental-modules
wenn Sie dieseenv
Shebang-Zeile verwenden. Es gibt Hacks, aber sie sind hässlich .