2016-08-26 1 views
1

Ich schreibe ein nodejs Kommandozeilenwerkzeug. Wenn ich testen, indem npm install laufen und versuchen, es lokal ausführen, erstellt npm die folgenden Dateien in node_modules/.bin:Wie bekomme ich das npm-Paket, um funktionierende Skripte in .bin zu haben, wenn es installiert ist?


node_modules/.bin/myapp enthält:

"$basedir/../myapp/dist/myappcli.js" "[email protected]" 
exit $? 

node_modules/.bin/myapp.cmd enthält:

"%~dp0\..\myapp\dist\myappcli.js" %* 

Sie sind nicht sehr nützlich.

Auf der anderen Seite, wenn ich beliebt NodeJS cli-Tools wie js-yaml oder Typisierungen installieren, erhalte ich viel nützliche Dateien:


node_modules/.bin/typings enthalten:

#!/bin/sh 
basedir=`dirname "$0"` 

case `uname` in 
    *CYGWIN*) basedir=`cygpath -w "$basedir"`;; 
esac 

if [ -x "$basedir/node" ]; then 
    "$basedir/node" "$basedir/../typings/dist/bin.js" "[email protected]" 
    ret=$? 
else 
    node "$basedir/../typings/dist/bin.js" "[email protected]" 
    ret=$? 
fi 
exit $re 

node_modules/.bin/typings.cmd enthält:

@IF EXIST "%~dp0\node.exe" (
    "%~dp0\node.exe" "%~dp0\..\typings\dist\bin.js" %* 
) ELSE (
    @SETLOCAL 
    @SET PATHEXT=%PATHEXT:;.JS;=;% 
    node "%~dp0\..\typings\dist\bin.js" %* 
) 

Diese tatsächlich erfolgreich ihre Apps. Warum bekommen sie dieses ausgefallene Zeug? Wie kann ich meine App dazu befähigen? Muss ich Dateien manuell zu einem tgz hinzufügen, bevor ich sie auf einen npm-Host hochlade? Ich hoffe nicht, weil ich in der Lage sein möchte, meine App direkt von Github zu installieren, oder zumindest npm pack den endgültigen, kompletten tgz generieren zu lassen.

Dank

+0

Kennen Sie die Eigenschaft 'bin', die Sie in package.json definieren können, oder fragen Sie sich, wie Sie die Befehle für Ihren CLI automatisch vervollständigen können? –

+0

Ich habe die bin-Eigenschaft definiert, aber es bringt mir diese komplizierten Skripte nicht. Keine Sorge wegen Tab-Vervollständigung –

Antwort

0

die folgende Zeile in der obersten Etage der JavaScript-Datei hinzufügen, die für Ihre Kommandozeilen-Anwendung als Einstiegspunkt dient:

#!/usr/bin/env node

Sie jmir for this answer danken.

Verwandte Themen