Wenn ich die Entwicklung der npm Paket foo
und ich möchte es weltweit als Kommandozeilen-Anwendung installiert werden, kann ich dies, indem zu meinem package.json einfach tun:Warum öffnet das globale npm-verknüpfte Paket einfach die bin-Datei?
"bin": {
"foo": "./bin/foo.js"
}
Jemand, der meine installiert package global via npm wird die entsprechende Batch-Datei und das Shell-Skript zu ihrem globalen npm-Präfix-Verzeichnis hinzugefügt. Angenommen, ich möchte mein Paket über die Shell (oder im Fall von Windows die Eingabeaufforderung) starten können. Ich könnte dies tun, indem ich irgendwo in einem meiner PATH-Verzeichnisse ein Batchdatei-/Shell-Skript erstelle, das mein Paket einfach direkt ausführt, z. @node C:\my\package\directory\bin\foo %*
.
Dies ist eine ziemlich einfache und offensichtliche Lösung, aber ich fühlte, dass npm link
war besser geeignet, da es weniger hacky fühlt und ist theoretisch so genau dies zu tun. Ich führe npm link
in meinem Paketverzeichnis aus, dann teste es, indem ich foo
von der Befehlszeile aus führe. Anstatt mein Skript auszuführen, wird foo.js
tatsächlich in meinem Standardeditor geöffnet. Die Untersuchung im Präfix Verzeichnis, stellt sich heraus, dass die foo.cmd
-Datei (der Inhalt des foo
Shell-Skript ähnlich sind), dass erstellt npm enthält diese:
"%~dp0\node_modules\foo\bin\foo.js" %*
mit der Batch-Datei von npm install -g
erstellt Vergleichen:
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\node_modules\npm\bin\npm-cli.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\node_modules\npm\bin\npm-cli.js" %*
)
Warum erstellt npm link
Skriptdateien, die die bin-Datei eines Pakets starten, statt den Knoten mit der bin-Datei als Argument zu starten? Wie kann ich dieses Verhalten beheben?
irgendeine Lösung dafür? – kingPuppy